我有一个具有以下结构的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中的每个组中将dictGroupBy.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/

10-12 21:52