Python 如何使用pandas对与给定条件匹配的列中的值求和?

Python 如何使用pandas对与给定条件匹配的列中的值求和?,python,pandas,dataframe,data-analysis,Python,Pandas,Dataframe,Data Analysis,假设我有一个这样的专栏: a b 1 5 1 7 2 3 1 3 2 5 例如,我想对b的值求和,其中a=1。这将给我5+7+3=15 如何在熊猫中实现这一点?这里的基本思想是选择要求和的数据,然后求和。这种数据选择可以通过几种不同的方式完成,其中一些方式如下所示 布尔索引 可以说,选择值的最常见方法是使用 使用此方法,您可以找出列“a”在哪里等于1,然后对列“b”的相应行求和。您可以使用loc处理行和列的索引: >>> df.loc[df[

假设我有一个这样的专栏:

a   b  
1   5   
1   7
2   3
1   3
2   5
例如,我想对
b
的值求和,其中
a=1
。这将给我
5+7+3=15


如何在熊猫中实现这一点?

这里的基本思想是选择要求和的数据,然后求和。这种数据选择可以通过几种不同的方式完成,其中一些方式如下所示

布尔索引 可以说,选择值的最常见方法是使用

使用此方法,您可以找出列“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()
查询 选择数据的另一种方法是使用筛选感兴趣的行,选择列“b”,然后求和:

>>> df.query("a == 1")['b'].sum()
15
同样,可以扩展该方法以对数据进行更复杂的选择:

df.query("a == 1 and c == 2")['b'].sum()
注意,这比布尔索引方法更简洁

群比 另一种方法是根据列“a”中的值将数据帧拆分为多个部分。然后,您可以对每个部分求和,并得出1加起来的值:

>>> df.groupby('a')['b'].sum()[1]
15
这种方法可能比使用布尔索引要慢,但如果您想检查列
a
中的其他值的总和,这种方法很有用:

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

您也可以在不使用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())

什么是
.b
部分?您是如何为这样的列编制索引的?您可以通过编写
df['a']
df.a
来访问数据帧的
a列。第二种方法很方便,但如果列名包含多个单词(如“person id”),或者列名与数据帧方法(如“where”或“sum”)一致,则无法正常工作。好的,谢谢,还有,如何将列中的所有值转换为
int
,从而使我能够对它们求和?我正在使用
map
将它们转换为
int
,但我认为熊猫中可能有一个内置函数可以更有效地实现这一点。你可以编写
df['a']=df['a'].astype(int)
df['a']=df['a'].convert_对象(convert\u numeric=True)
来实现这一点。@LucSpan:当然,你可以编写
df.loc[(df['a']==1)和(df['c']==2),'b'].sum()
对值求和。