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

 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


所以我在列中有多索引,只有两个列“ Date”和“ Top”,然后“ Top”有两个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]键值对内的键。这样我就可以轻松访问所有“热门”日期。

谢谢你的帮助

最佳答案

您可以使用dict comprehension进行第一级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}


Simplier是使用熊猫根据索引值和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 数据框到所需的Python字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54017861/

10-12 20:04
查看更多