gpt4 book ai didi

python(pandas)根据不同行的值创建一个新列

转载 作者:太空宇宙 更新时间:2023-11-03 19:46:47 25 4
gpt4 key购买 nike

我有一个来自 cvs 文件的数据框,如下所示:

     #F      E    G
0 1 n.e. 153
1 1 60 15
2 1 99 10
3 1 S 23
4 2 n.e. 190
5 2 60 44
6 2 99 22
7 2 S 67

我想为此添加一个新列。

对于每个 [#F] 组,每行中的 [G] 值应除以 [E]='n.e.' 的行中的 [G] 值所以,最终,它应该看起来像这样:

     #F      E    G     rel
0 1 n.e. 153 1.000
1 1 60 15 0.098
2 1 99 10 0.065
3 1 S 23 0.150
4 2 n.e. 190 1.000
5 2 60 44 0.232
6 2 99 22 0.116
7 2 S 67 0.353

我尝试了几种使用函数、组或 np.where 的方法,但问题比我的经验要复杂一些,最终没有任何结果。

感谢您的帮助。

最佳答案

我会使用Series.div 。使用 Series.where 为每个组创建具有相应 n.e. 值的系列和 Groupby.transform .

Note that first, omit the NaN values, so the position of the .ne. value in the group does not matter. We could also use max instead first.

df['Rel']=df['G'].div(df['G'].where(df['E'].eq('n.e.'))
.groupby(df['#F']).transform('first'))
print(df)
#F E G Rel
0 1 n.e. 153 1.000000
1 1 60 15 0.098039
2 1 99 10 0.065359
3 1 S 23 0.150327
4 2 n.e. 190 1.000000
5 2 60 44 0.231579
6 2 99 22 0.115789
7 2 S 67 0.352632

编辑

df['Rel']=df['G'].div(df['G'].where(df['E'].eq('n.e. '))
.groupby(df['#F']).transform('first'))

关于python(pandas)根据不同行的值创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60079496/

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