gpt4 book ai didi

pandas - groupby 在 pandas 中使用 if 条件进行转换

转载 作者:行者123 更新时间:2023-12-05 05:36:35 26 4
gpt4 key购买 nike

我有一个如下所示的数据框

df = pd.DataFrame({'key': ['a', 'a', 'a', 'b', 'c', 'c'] , 'val' : [10, np.nan, 9 , 10, 11, 13]})
df

key val
0 a 10.0
1 a NaN
2 a 9.0
3 b 10.0
4 c 11.0
5 c 13.0

我想执行 groupby 并转换 new 列是每个值除以 group mean ,我可以按如下方式执行

df['new'] = df.groupby('key')['val'].transform(lambda g :  g/g.mean())
df.new

0 1.052632
1 NaN
2 0.947368
3 1.000000
4 0.916667
5 1.083333
Name: new, dtype: float64

现在我有条件,如果 val 是 np.nan 那么 new 列值将是 np.inf,结果如下

0    1.052632
1 np.inf
2 0.947368
3 1.000000
4 0.916667
5 1.083333
Name: new, dtype: float64

换句话说,如果 val 是带有 groupby 和 transform 的 np.nan,我该如何检查。

提前致谢

最佳答案

添加Series.replace :

df['new'] = (df.groupby('key')['val'].transform(lambda g :  g/g.mean())
.replace(np.nan, np.inf))
print (df)
key val new
0 a 10.0 1.052632
1 a NaN inf
2 a 9.0 0.947368
3 b 10.0 1.000000
4 c 11.0 0.916667
5 c 13.0 1.083333

numpy.where :

df['new'] = np.where(df.val.isna(), 
np.inf, df.groupby('key')['val'].transform(lambda g : g/g.mean()))
print (df)
key val new
0 a 10.0 1.052632
1 a NaN inf
2 a 9.0 0.947368
3 b 10.0 1.000000
4 c 11.0 0.916667
5 c 13.0 1.083333

关于pandas - groupby 在 pandas 中使用 if 条件进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73287707/

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