我有一个具有以下结构的df:
date country value
20200215 Austria 123.32
20200215 Finland 321.21
20200216 Austria 123.32
20200216 Finland 321.21
我想要实现的是:
date CountryValue
20200215 ['Austria':123.32,'Finland':321.21]
20200216 ['Austria':123.32,'Finland':321.21]
我没有找到解决方案,因此请提供任何帮助。
最佳答案
如果希望字典在lambda函数中的zip
中的每个组中将dict
与GroupBy.apply
结合使用:
f1 = lambda x: dict(zip(x['country'], x['value']))
df1 = df.groupby('date')['country','value'].apply(f1).reset_index(name='CountryValue')
print (df1)
date CountryValue
0 20200215 {'Austria': 123.32, 'Finland': 321.21}
1 20200216 {'Austria': 123.32, 'Finland': 321.21}
如果要使用列表,请在列表理解中使用拼合列表:
f2 = lambda x: [z for y in x.values for z in y]
df2 = df.groupby('date')['country','value'].apply(f2).reset_index(name='CountryValue')
print (df2)
date CountryValue
0 20200215 [Austria, 123.32, Finland, 321.21]
1 20200216 [Austria, 123.32, Finland, 321.21]
关于python - Pandas 列排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60282069/