gpt4 book ai didi

python - 在 pandas 中 groupby 之后对数据框变量执行数学运算并将结果返回到原始数据框

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

首先是数据:

df
City Date Sex Weight
0 A 6/12/2015 M 185
1 A 6/12/2015 F 120
2 A 7/12/2015 M 210
3 A 7/12/2015 F 105
4 B 6/12/2015 M 225
5 B 6/12/2015 F 155
6 B 6/19/2015 M 167
7 B 6/19/2015 F 121

我正在尝试减去两个重量,男性和女性。我可以对数据进行分组并选择每个性别的权重,但无法简单地创建一个新变量“wt_diff”并使“wt_diff”出现在每一行上,而不管性别如何,以便每个城市/日期/性别组都在事实上,在同一行中,性别之间存在体重差异。

我希望得到这样的输出:

df_new
City Date Sex Weight Wt_Diff
0 A 6/12/2015 M 185 65
1 A 6/12/2015 F 120 65
2 A 7/12/2015 M 210 105
3 A 7/12/2015 F 105 105
4 B 6/12/2015 M 225 70
5 B 6/12/2015 F 155 70
6 B 6/19/2015 M 167 46
7 B 6/19/2015 F 121 46

我可以使用以下方法获得重量差异:

def diffw(df):
return(np.diff(df.Weight)*-1)

gb = ['Date', 'City']
gb=df.groupby(gb).apply(diffw)

gb

Date City
6/12/2015 A [65]
B [70]
6/19/2015 B [46]
7/12/2015 A [105]
dtype: object

我只是不知道如何将 wt_diffs 返回到每行的原始 df。

非常感谢您的帮助。 。 。约翰

最佳答案

您可以使用GroupBy.transform :

>>> f = df.groupby(['City', 'Date'])['Weight'].transform
>>> df['Wt_Diff'] = f('max') - f('min')
>>> df
City Date Sex Weight Wt_Diff
0 A 6/12/2015 M 185 65
1 A 6/12/2015 F 120 65
2 A 7/12/2015 M 210 105
3 A 7/12/2015 F 105 105
4 B 6/12/2015 M 225 70
5 B 6/12/2015 F 155 70
6 B 6/19/2015 M 167 46
7 B 6/19/2015 F 121 46

编辑:如果 max - min 不起作用,最简单的方法是先添加有符号权重列:

>>> df['+/-Weight'] = df['Weight'].where(df['Sex'] == 'M', -df['Weight'])
>>> df['Wt_Diff'] = df.groupby(['City', 'Date'])['+/-Weight'].transform('sum')

关于python - 在 pandas 中 groupby 之后对数据框变量执行数学运算并将结果返回到原始数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813478/

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