gpt4 book ai didi

python pandas数据框groupby或pivot_table

转载 作者:行者123 更新时间:2023-11-30 21:57:28 25 4
gpt4 key购买 nike

示例:

import pandas as pd
data = {'id':[101,101,101,101,102,102,102,102],
'day':[1,2,1,2,1,2,1,2],
'year':[2011,2011,2012,2012,2011,2011,2012,2012],
'avg':[0.500,0.400,0.300,0.200,0.555,0.455,0.355,0.255],
'sum':[1, 2, 2, 3, 6, 6, 8, 9],
'div':[2, 1, 3, 2, 6, 1, 6, 3]}
df = pd.DataFrame(data)
df

id day year avg sum div
0 101 1 2011 0.500 1 2
1 101 2 2011 0.400 2 1
2 101 1 2012 0.300 2 3
3 101 2 2012 0.200 3 2
4 102 1 2011 0.555 6 6
5 102 2 2011 0.455 6 1
6 102 1 2012 0.355 8 6
7 102 2 2012 0.255 9 3

期望的输出:

    id  sum div 2011_avg    2012_avg    2011_sum    2012_sum    2011_div    2012_div
0 101 8 8 0.450 0.250 3 5 2 1.5
1 102 29 16 0.505 0.305 12 17 6 2.0

我按年份为每列制作了多个数据透视表并多次连接..

任何人都可以告诉我一些知识,以更简单或有效的方式获得所需的输出吗?

最佳答案

您可能需要groupby两次,然后join结果返回

s=df.groupby(['id','year']).agg({'avg':'mean','sum':'sum','div':lambda x : x.iloc[0]/x.iloc[1]})
s=s.unstack()# here is reshape
s.columns=s.columns.map('{0[1]}_{0[0]}'.format) # here is flatten the multiple index
s
Out[723]:
2011_avg 2012_avg 2011_sum 2012_sum 2011_div 2012_div
id
101 0.450 0.250 3 5 2.0 1.5
102 0.505 0.305 12 17 6.0 2.0

s2=df.groupby(['id']).agg({'sum':'sum','div':lambda x : x.iloc[0]/x.iloc[1]})

Finaldf=s2.join(s)# join back

Finaldf
Out[729]:
sum div 2011_avg ... 2012_sum 2011_div 2012_div
id ...
101 8 2 0.450 ... 5 2.0 1.5
102 29 6 0.505 ... 17 6.0 2.0
[2 rows x 8 columns]

关于python pandas数据框groupby或pivot_table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com