如何使用 Pandas 对符合给定条件的列中的值求和?
- 2025-03-05 09:17:00
- admin 原创
- 88
问题描述:
假设我有一个像这样的数据框:
a b
1 5
1 7
2 3
1 3
2 5
b
例如,我想对 的值求和a = 1
。这将给我5 + 7 + 3 = 15
。
我怎样在熊猫中做到这一点?
解决方案 1:
这里的核心思想是选择要求和的数据,然后对它们求和。数据的选择可以通过几种不同的方式完成,下面显示了其中几种。
布尔索引
可以说,选择值的最常见方式是使用布尔索引。
使用此方法,您可以找出列“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
解决方案 2:
您也可以不使用 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())
解决方案 3:
如果您想将总和作为一列分配回框架中,那么您可以使用它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')
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD