Python 使用pandas中的groupedby自定义数据帧排序
我是python新手,我有一个dataframe表:Python 使用pandas中的groupedby自定义数据帧排序,python,pandas,Python,Pandas,我是python新手,我有一个dataframe表: I J GAI F 0 660 433 6016 0.000844 1 660 433 6020 0.888889 2 660 434 6016 0.010041 3 661 433 6016 0.021373 我想对其进行格式化,以获得如下输出: 660: {433: [[6016,0.000844]], [[6020,0.888889]], 434:
I J GAI F
0 660 433 6016 0.000844
1 660 433 6020 0.888889
2 660 434 6016 0.010041
3 661 433 6016 0.021373
我想对其进行格式化,以获得如下输出:
660: {433: [[6016,0.000844]], [[6020,0.888889]],
434: [[6016,0.010041]]}
661: {433: [[6016,0.021373]]}
基本上,输出应该按I和J分组,然后写入相应的GAI/F组合
我使用了df.groupedby(['I','J']),得到了下面的结果,虽然很接近,但并不完全正确:
((660, 433), I J GAI F
0 660 433 6016 0.000844
1 660 433 6020 0.888889)
((660, 434), I J GAI F
2 660 434 6016 0.010041)
((661, 433), I J GAI F
3 661 433 6016 0.021373)
有人能快速解决我的问题吗?我一整天都在网上搜寻,却没有这样的运气。IIUC,你可以使用嵌套的
defaultdict
from collections import defaultdict
x = defaultdict(lambda: defaultdict(list))
for d in df.groupby(['I', 'J'], as_index=False).agg(list).to_dict('r'):
x[d['I']][d['J']].append(list(zip(d['GAI'], d['F'])))
df.groupby('I').apply(lambda x : x.groupby('J')[['GAI','F']].apply(lambda x : x.values.tolist()).to_dict()).to_dict()
Out[461]:
{660: {433: [[6016.0, 0.0008439999999999999], [6020.0, 0.8888889999999999]],
434: [[6016.0, 0.010041]]},
661: {433: [[6016.0, 0.021373]]}}
如果需要,可以在最后转换回dict
x = {k: dict(v) for k, v in x.items()}
{660: {433: [[(6016, 0.0008439999999999999), (6020, 0.8888889999999999)]],
434: [[(6016, 0.010041)]]},
661: {433: [[(6016, 0.021373)]]}}
通过使用
groupby
和来记录
from collections import defaultdict
x = defaultdict(lambda: defaultdict(list))
for d in df.groupby(['I', 'J'], as_index=False).agg(list).to_dict('r'):
x[d['I']][d['J']].append(list(zip(d['GAI'], d['F'])))
df.groupby('I').apply(lambda x : x.groupby('J')[['GAI','F']].apply(lambda x : x.values.tolist()).to_dict()).to_dict()
Out[461]:
{660: {433: [[6016.0, 0.0008439999999999999], [6020.0, 0.8888889999999999]],
434: [[6016.0, 0.010041]]},
661: {433: [[6016.0, 0.021373]]}}