gpt4 book ai didi

python - pandas 计算组上的列值平均值以及整个数据帧的平均值

转载 作者:行者123 更新时间:2023-12-01 09:25:39 25 4
gpt4 key购买 nike

我有一个df , df['period'] = (df['date1'] - df['date2']) / np.timedelta64(1, 'D')

code    y_m        date1        date2         period    
1000 201701 2017-12-10 2017-12-09 1
1000 201701 2017-12-14 2017-12-12 2
1000 201702 2017-12-15 2017-12-13 2
1000 201702 2017-12-17 2017-12-15 2
2000 201701 2017-12-19 2017-12-18 1
2000 201701 2017-12-12 2017-12-10 2
2000 201702 2017-12-11 2017-12-10 1
2000 201702 2017-12-13 2017-12-12 1
2000 201702 2017-12-11 2017-12-10 1

然后groupby codey_m计算 date1-date2 的平均值,

df_avg_period = df.groupby(['code', 'y_m'])['period'].mean().reset_index(name='avg_period')

code y_m avg_period
1000 201701 1.5
1000 201702 2
2000 201701 1.5
2000 201702 1

但我喜欢转换df_avg_period转换为转置列 code 的矩阵到行和 y_m到列,例如

      0     1     2             3              
0 -1 0 201701 201702
1 0 1.44 1.44 1.4
2 1000 1.75 1.5 2
3 2000 1.20 1.5 1

-1表示一个虚拟值,指示特定 code 不存在值/y_m细胞或维持矩阵形状; 0 代表“所有”值,即 code 的平均值或y_mcodey_m ,例如细胞(1,1)平均 period df 中所有行的值; (1,2)平均 period对于 201701具有此值 y_m 的所有行在df .

显然pivot_table使用 mean 无法给出正确的结果。所以我想知道如何正确实现这一目标?

最佳答案

pivot_tablemargins=True

piv = df.pivot_table(
index='code', columns='y_m', values='period', aggfunc='mean', margins=True
)
# housekeeping
(piv.reset_index()
.rename_axis(None, 1)
.rename({'code' : -1, 'All' : 0}, axis=1)
.sort_index(axis=1)
)

-1 0 201701 201702
0 1000 1.750000 1.5 2.0
1 2000 1.200000 1.5 1.0
2 All 1.444444 1.5 1.4

关于python - pandas 计算组上的列值平均值以及整个数据帧的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415402/

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