我有熊猫DataFrame,我试图聚合并存储为dicts
的选择列。
import pandas as pd
df = pd.DataFrame({
'id': [1, 1, 2],
'lat': [37.7825, 37.7825, 37.7836],
'lon': [-122.4148, -122.4148, -122.4127],
'b': [1, 2, 1],
'r': [1000, 1300, 1100],
's': [650, 720, 600]
})
我想聚合数据框,这样b
,r
和s
的每个唯一组合都存储为集合,list of dicts
在一列中。
考虑b
,r
或s
中的NaNs
等任何边缘情况。如果是NaNs
,那么不要将它们存储为字典。
预期输出:
id lat lon new
1 37.7825 -122.4148 [{'b': 1, 'r': 1000, 's': 650}, {'b': 2, 'r': 1300, 's': 720}]
2 37.7836 -122.4127 [{'b': 1, 'r': 1100, 's': 600}]
您可以将to_dict
称为" records"ingroupby.apply
:
out = df.groupby(['id','lat','lon'])[['b','r','s']].apply(lambda x: x.to_dict('records')).reset_index(name='new')
输出:
id lat lon new
0 1 37.7825 -122.4148 [{'b': 1, 'r': 1000, 's': 650}, {'b': 2, 'r': 1300, 's': 720}]
1 2 37.7836 -122.4127 [{'b': 1, 'r': 1100, 's': 600}]