gpt4 book ai didi

python - Pandas DataFrame 中的交叉表

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:40 27 4
gpt4 key购买 nike

我创建了一个数据框

    A1  A2  A3  A4
0 cccc xx 6 5
1 aaaa yy 8 0
2 aaaa xx 15 0
3 bbbb xx 21 4
4 bbbb xx 26 0
5 cccc yy 33 2
6 aaaa xx 44 1
7 cccc xx 48 2
8 aaaa yy 58 0
9 cccc yy 59 5
10 bbbb yy 77 0
11 bbbb yy 99 0

现在使用crosstab()和下面给出的命令创建了新的DataFrame。

df5 = pd.crosstab(df4['A1'], df4['A2'], margins=False,values=df4['A3'] , 
dropna=False, aggfunc='mean').reset_index().fillna(0)

这工作正常。它给我的输出如下

A2   A1      xx      yy
0 aaaa 29.5 33.0
1 bbbb 23.5 88.0
2 cccc 27.0 46.0

现在我想将平均值存储到 DataFrame df4

由于我想根据 crosstab() 更改 A3(其中 df5 中包含 0),我该怎么做?我想要输出如下

    A1      A2  A3  A4    
0 aaaa xx 15 29.5
1 aaaa xx 44 1.0
2 aaaa yy 8 33.0
3 aaaa yy 58 33.0
4 bbbb xx 21 4.0
5 bbbb xx 26 23.5
6 bbbb yy 77 88.0
7 bbbb yy 99 88.0
8 cccc xx 6 5.0
9 cccc xx 48 2.0

最佳答案

mask + groupby + 变换

忽略不必要的重新排序和删除所需输出中的某些行,您可以将 maskgroupby 结合使用:

group_mean = df4.groupby(['A1', 'A2'])['A3'].transform('mean')

df4['A4'] = df4['A4'].mask(df4['A4'] == 0, group_mean)

print(df4)

A1 A2 A3 A4
0 cccc xx 6 5.0
1 aaaa yy 8 33.0
2 aaaa xx 15 29.5
3 bbbb xx 21 4.0
4 bbbb xx 26 23.5
5 cccc yy 33 2.0
6 aaaa xx 44 1.0
7 cccc xx 48 2.0
8 aaaa yy 58 33.0
9 cccc yy 59 5.0
10 bbbb yy 77 88.0
11 bbbb yy 99 88.0

关于python - Pandas DataFrame 中的交叉表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53375106/

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