如何使用Pandas对符合给定条件的列中的值求和?

ctrmrzij  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(311)

假设我有这样一个 Dataframe :

a   b
1   5
1   7
2   3
1   3
2   5

我想对b的值求和,比如,这会给予。
在Pandas身上我该怎么做?

o0lyfsai

o0lyfsai1#

这里的基本思想是选择要求和的数据,然后对它们求和。可以用几种不同的方法来选择数据,下面显示了其中的几种方法。

布尔索引

可以说,选择值的最常用方法是使用布尔索引。
使用此方法,您可以找出列'a'在何处等于1,然后对列'b'的相应行求和。您可以使用loc来处理行和列的索引:

>>> df.loc[df['a'] == 1, 'b'].sum()
15

布尔索引可以扩展到其他列。例如,如果df还包含列'c',我们想对'b'中的行求和,其中'a'为1,'c'为2,我们可以写:

df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()

查询

选择数据的另一种方法是使用query过滤您感兴趣的行,选择列“B”,然后求和:

>>> df.query("a == 1")['b'].sum()
15

同样,该方法可以被扩展以进行更复杂的数据选择:

df.query("a == 1 and c == 2")['b'].sum()

注意,这比布尔索引方法更简洁一些。

分组依据

另一种方法是使用groupby根据列“a”中的值将DataFrame拆分为多个部分。然后,您可以对每个部分求和,并得出1相加后的值:

>>> df.groupby('a')['b'].sum()[1]
15

这种方法可能比使用布尔索引要慢,但如果您想检查列a中其他值的总和,这种方法很有用:

>>> df.groupby('a')['b'].sum()
a
1    15
2     8
umuewwlo

umuewwlo2#

你也可以不使用groupby或loc来完成这个操作,只要在代码中包含条件即可,假设 Dataframe 的名称为df,然后你可以尝试:

df[df['a']==1]['b'].sum()

或者您也可以尝试:

sum(df[df['a']==1]['b'])

另一种方法是使用python的numpy库:

import numpy as np
print(np.where(df['a']==1, df['b'],0).sum())
gmol1639

gmol16393#

如果要将总和作为列重新分配到帧中,则可以使用groupby.transform使总和具有与原始帧相同的索引。

# group by values of df.a
df['b_sum_by_a'] = df.groupby('a')['b'].transform('sum')

# group by whether df.a is 1 or not
df['b_sum_by_a'] = df.groupby(df['a']==1)['b'].transform('sum')

相关问题