python - Pandas Dataframe 到所需的 python 字典

标签 python pandas dictionary

我有一个如下所示的数据框

 Date        Top      
            A    B
2018-09-30  1.2  2.3
2018-10-01  1.5  1.7
2018-10-02  2.3  2.8
2018-10-03  7.7  7.5
2018-10-04  1.1  0.9
2018-10-05  2.1  6.5

所以我在列中有多重索引,只有两列“日期”和“顶部”,然后“顶部”有两个 1 级列“A”和“B”。

我正在尝试将它们转换为Python字典。

当我使用时

df_dict = df.to_dict(orient = 'index')

我得到一个输出

{0: {('Top', 'A'): 1.2, ('Top', 'B'): 2.3, ('date', ''): '2018-09-30'},
1: {('Top', 'A'): 1.5, ('Top', 'B'): 1.7, ('date', ''): '2018-10-01'},
2: {('Top', 'A'): 2.3, ('Top', 'B'): 2.8, ('date', ''): '2018-10-02'},
3: {('Top', 'A'): 7.7, ('Top', 'B'): 7.5, ('date', ''): '2018-10-03'},
4: {('Top', 'A'): 1.1, ('Top', 'B'): 0.9, ('date', ''): '2018-10-04'},
5: {('Top', 'A'): 2.1, ('Top', 'B'): 6.5, ('date', ''): '2018-10-05'}}

现在我可以使用以下脚本访问 df_dict,输出为 1.2

df_dict[1]['Top']['Top','A']

但是我正在寻找这个脚本的输出

df_dict[1]['Top']

Output: A:1.2, B:2.3

因为“Top”不是第一个 [1] 键值对中的键。这样我就可以轻松访问所有“热门”约会。

感谢大家的帮助

最佳答案

您可以使用字典理解并按第一级Top进行过滤:

df_dict = df.to_dict(orient = 'index')
out = {k2: v for (k1, k2), v in df_dict[0].items() if k1 == 'Top'}
print (out)
{'A': 1.2, 'B': 2.3}

更简单的是使用pandas按索引值和MultiIndex的第一级进行选择,然后创建dict:

print (df.loc[0, 'Top'])
A    1.2
B    2.3
Name: 0, dtype: object

out = df.loc[0, 'Top'].to_dict()
print (out)
{'A': 1.2, 'B': 2.3}

编辑:

print (df)
              A    B
2018-09-30  1.2  2.3
2018-10-01  1.5  1.7
2018-10-02  2.3  2.8
2018-10-03  7.7  7.5
2018-10-04  1.1  0.9
2018-10-05  2.1  6.5

df.index.name = 'date'
df = df.reset_index()
#set MultiIndex for each columns for avoid empty strings keys
df.columns = [['d','Top', 'Top'], df.columns]

#for each first level of MultiIndex create dictionary
#also add new level to outer level of dict 
out = {x:df[x].to_dict(orient = 'index') for x in df.columns.levels[0]}
print (out)
{'Top': {0: {'A': 1.2, 'B': 2.3}, 1: {'A': 1.5, 'B': 1.7}, 2: {'A': 2.3, 'B': 2.8}, 
         3: {'A': 7.7, 'B': 7.5}, 4: {'A': 1.1, 'B': 0.9}, 5: {'A': 2.1, 'B': 6.5}}, 
'd': {0: {'date': '2018-09-30'}, 1: {'date': '2018-10-01'}, 
      2: {'date': '2018-10-02'}, 3: {'date': '2018-10-03'}, 
      4: {'date': '2018-10-04'}, 5: {'date': '2018-10-05'}}}

print (out['Top'][0])
{'A': 1.2, 'B': 2.3}

关于python - Pandas Dataframe 到所需的 python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54017861/

相关文章:

python - 如何将导入的txt文件的文件名添加到python中的数据帧

python - 如何在 pandas DataFrame 中每 5 行后添加新 id,

python - 'using a dict on a Series for aggregation' 的替代方案是什么

python - 从列表中获取数据

python - Django 脆皮形式 : add text next to a checkbox?

python - 如何根据谓词对迭代器输出进行分段?

python - Numpy 数组声明错误

python - 在 Python 中以 1000 秒为单位测量两个经纬度点之间的距离

python - 基于从 Pandas DataFrame 中其他 2 列的值进行条件选择的新列

Python 计算字典中值的出现次数