我有多索引的数据帧,我需要使用pd.to_dict
或任何其他函数将其格式化为dict
列表
df = pd.DataFrame(index=[0,0,1,1], data={('c', 'a'):[10,15, 20, 50], ('c', 'b'):[15,25, 20, 30]})
c
a b
0 10 15
0 15 25
1 20 20
1 50 30
例外输出:
{0: [{(c,a):10, (c,b):15}, {(c,a):15, (c,b):25}], 1: [{(c,a):20, (c,b):20}, {(c,a):50, (c,b):30}]}
有没有实现此目的的最佳方法?
我们可以使用DataFrame.groupby
对索引中的每个唯一值使用DataFrame.to_dict
。
my_dict = {i : group.to_dict('records') for i, group in df.groupby(level=0)}
输出
{0: [{('c', 'a'): 10, ('c', 'b'): 15}, {('c', 'a'): 15, ('c', 'b'): 25}],
1: [{('c', 'a'): 20, ('c', 'b'): 20}, {('c', 'a'): 50, ('c', 'b'): 30}]}
我会按索引分组作为外部循环,然后在每个组上使用迭代行
{idx: [v.to_dict() for _, v in grp.iterrows()] for idx, grp in df.groupby(level=0)}
level=0
用于引用未命名的索引级别