gpt4 book ai didi

python - 如何按数据框的值分组?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:37 25 4
gpt4 key购买 nike

我有这 2 个基本相同的 df,但在 df1 中,值是相应客户的付款金额,另一个是该时期的客户状态(第 1、2、3、4 列是句点):

df1:

customer|1|2|3|4
x |2|5|5|5
y | |5|5|5
z |5|5|5|

df2:

customer|1|2|3|4
x |N|E|E|E
y | |N|E|E
z |N|E|C|-

我想按状态分组,df2 的值如下:

Status  1 |2 |3 |4
N 7|5 | |
E |10|10|10
C | |5 |

我曾经使用

对状态计数进行分组
df2.apply(pd.value_counts).fillna(0)

但是现在,我不想计算值,而是想SUM相应数据帧DF1

的值

最佳答案

通常,这看起来很困难,因为您的 DataFrame 形状很奇怪。如果你先melt他们,它变得容易:只是merge他们,groupby您感兴趣的数量并对它们求和(如果您想以该格式显示它,则再次 pivot):

df1m = df1.melt(id_vars='customer', var_name='period', value_name='amount')
df2m = df2.melt(id_vars='customer', var_name='period', value_name='status')
dfm = df1m.merge(df2m)
res = dfm.groupby(['status', 'period'])['amount'].sum().reset_index()
res.pivot_table(index='status', columns='period')

#period 1 2 3 4
#status
#C NaN NaN 5.0 NaN
#E NaN 10.0 10.0 10.0
#N 7.0 5.0 NaN NaN

为了展示 melt 的作用:它取消了 DataFrame 的旋转,因此每个观察(客户、期间)都有一行,其中包含金额/状态

df1m
# customer period amount
#0 x 1 2.0
#1 y 1 NaN
#2 z 1 5.0
#3 x 2 5.0
#4 y 2 5.0
#5 z 2 5.0
#6 x 3 5.0
#7 y 3 5.0
#8 z 3 5.0
#9 x 4 5.0
#10 y 4 5.0
11 z 4 NaN

关于python - 如何按数据框的值分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55421609/

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