熊猫:如何根据其他列值的条件求和?

ShanZhengYang

我有以下熊猫DataFrame。

import pandas as pd
df = pd.read_csv('filename.csv')

print(df)

     dog      A         B           C
0     dog1    0.787575  0.159330    0.053095
1     dog10   0.770698  0.169487    0.059815
2     dog11   0.792689  0.152043    0.055268
3     dog12   0.785066  0.160361    0.054573
4     dog13   0.795455  0.150464    0.054081
5     dog14   0.794873  0.150700    0.054426
..    ....
8     dog19   0.811585  0.140207    0.048208
9     dog2    0.797202  0.152033    0.050765
10    dog20   0.801607  0.145137    0.053256
11    dog21   0.792689  0.152043    0.055268
    ....

我通过汇总"A",来创建一个新列"B""C"如下所示:

df['total_ABC'] = df[["A", "B", "B"]].sum(axis=1)

现在,我想根据条件来执行此操作,即如果"A" < 0.78然后创建一个新的summmed column df['smallA_sum'] = df[["A", "B", "B"]].sum(axis=1)否则,该值应为零。

一个人如何创建这样的条件语句?

我的想法是要使用

df['smallA_sum'] = df1.apply(lambda row: (row['A']+row['B']+row['C']) if row['A'] < 0.78))

但是,这不起作用,并且我无法指定轴。

如何基于其他列的值创建列?

您还可以对each进行类似的操作df['dog'] == 'dog2',创建column dog2_sum,即

 df['dog2_sum'] = df1.apply(lambda row: (row['A']+row['B']+row['C']) if df['dog'] == 'dog2'))

但是我的方法是不正确的。

`

埃德·楚姆

以下应该起作用,在这里我们将满足条件的df屏蔽,这将设置为不满足条件NaN的行,因此我们调用fillna新的col:

In [67]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC'))
df

Out[67]:
          A         B         C
0  0.197334  0.707852 -0.443475
1 -1.063765 -0.914877  1.585882
2  0.899477  1.064308  1.426789
3 -0.556486 -0.150080 -0.149494
4 -0.035858  0.777523 -0.453747

In [73]:    
df['total'] = df.loc[df['A'] > 0,['A','B']].sum(axis=1)
df['total'].fillna(0, inplace=True)
df

Out[73]:
          A         B         C     total
0  0.197334  0.707852 -0.443475  0.905186
1 -1.063765 -0.914877  1.585882  0.000000
2  0.899477  1.064308  1.426789  1.963785
3 -0.556486 -0.150080 -0.149494  0.000000
4 -0.035858  0.777523 -0.453747  0.000000

另一种方法是调用wheresum结果,这需要一个值参数去回报,当条件不满足:

In [75]:
df['total'] = df[['A','B']].sum(axis=1).where(df['A'] > 0, 0)
df

Out[75]:
          A         B         C     total
0  0.197334  0.707852 -0.443475  0.905186
1 -1.063765 -0.914877  1.585882  0.000000
2  0.899477  1.064308  1.426789  1.963785
3 -0.556486 -0.150080 -0.149494  0.000000
4 -0.035858  0.777523 -0.453747  0.000000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:根据其他列的值有条件地替换值

根据其他列的条件在熊猫中创建新列

如何根据熊猫中其他两列中的查找值分配最小值?

如何根据其他列和其他条件过滤熊猫数据框并仅保留行

如何根据Pandas DataFrame中其他列的值仅对某个列的某些元素求和?

根据熊猫df中其他列的值有条件地填充列

如何根据其他列的条件对熊猫的“数据框”列进行操作

熊猫-如何根据条件求和2列中的X个最后一个值

根据其他列中的值求和(变量)

熊猫:如何创建基于其他列值的条件对其他列求和的列?

Matlab:如何根据其他列中的条目求和一定范围内的值

熊猫根据其他列中的条件和值创建新列

根据其他列中的条件对列中的唯一值求和

熊猫:求和列,直到满足其他列的条件

根据其他熊猫列值比较列值

如何对其他列的条件求和

如何使用其他列值求和

如何根据cakephp中的其他列值求和

根据其他列中的条件对一列中的值求和,并更改值

如何根据其他 4 列的值对一列中的值求和?

根据熊猫数据框中其他列的条件和值创建新列

如何使用熊猫数据框中其他列的条件语句对列中的值求和?

Google表格:根据其他列的条件求和列

如何根据熊猫中的其他列映射值?

根据 R 中的其他列值对行求和

创建列,其中根据其他列值的条件对其他列求和?

如何根据python中其他列的条件计算值?

如何根据其他列值对某一列求和

如何根据熊猫中的条件对某些列进行求和