如何使用 pandas 对符合给定条件的列中的值求和?
How do I sum values in a column that match a given condition using pandas?
假设我有这样一个专栏:
a b
1 5
1 7
2 3
1 3
2 5
例如,我想总结 b
的值,其中 a = 1
。这会给我 5 + 7 + 3 = 15
.
如何在 pandas 中执行此操作?
这里的本质思想是select你要求和的数据,然后求和。这种 select 大量数据可以通过几种不同的方式完成,下面显示了其中一些。
布尔索引
可以说,select 值最常用的方法是使用 Boolean indexing。
使用此方法,您可以找出列 '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()
查询
另一种 select 数据的方法是使用 query
过滤您感兴趣的行,select 列 'b' 然后求和:
>>> df.query("a == 1")['b'].sum()
15
同样,可以扩展该方法以生成更复杂的 select 数据离子:
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
您也可以在不使用 groupby 或 loc 的情况下执行此操作。通过简单地在代码中包含条件。让数据框的名称为 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())
假设我有这样一个专栏:
a b
1 5
1 7
2 3
1 3
2 5
例如,我想总结 b
的值,其中 a = 1
。这会给我 5 + 7 + 3 = 15
.
如何在 pandas 中执行此操作?
这里的本质思想是select你要求和的数据,然后求和。这种 select 大量数据可以通过几种不同的方式完成,下面显示了其中一些。
布尔索引
可以说,select 值最常用的方法是使用 Boolean indexing。
使用此方法,您可以找出列 '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()
查询
另一种 select 数据的方法是使用 query
过滤您感兴趣的行,select 列 'b' 然后求和:
>>> df.query("a == 1")['b'].sum()
15
同样,可以扩展该方法以生成更复杂的 select 数据离子:
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
您也可以在不使用 groupby 或 loc 的情况下执行此操作。通过简单地在代码中包含条件。让数据框的名称为 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())