基于条件为排序后的DataFrame新增result列并合并同名值
解决方法:用Pandas分组求和快速生成result列
嘿,这个需求其实用Pandas的内置方法就能轻松搞定,不用写复杂的循环逻辑。咱们直接上代码,再解释细节:
核心代码
假设你的DataFrame变量名为df,执行以下代码就能得到想要的结果:
# 按name分组计算对应valor的总和,并映射回原DataFrame的每一行 df['result'] = df.groupby('name')['valor'].transform('sum')
为什么这么做?
groupby('name'):把整个DataFrame按照name列的值分成不同的组,比如所有ACC的行是一组,ACE的行是另一组,以此类推。transform('sum'):这个方法的妙处在于,它会计算每个分组里valor列的总和,然后把这个总和赋值给该分组的每一行——正好对应你要的“当前行与后续同name行的valor相加”的需求,本质就是同一name下所有valor的累加值。
验证你的示例数据
用你的测试数据跑这个代码,得到的结果会是:
| date | name | valor | result |
|---|---|---|---|
| 2018-03-01 | ACC | 75 | 75 |
| 2018-03-01 | ACE | 50 | 100 |
| 2018-03-20 | ACE | 50 | 100 |
| 2018-03-01 | BBV | 20 | 40 |
| 2018-03-14 | BBV | 20 | 40 |
| 2018-04-16 | BBV | 58 | 40 |
| 2018-04-20 | BBV | -58 | 40 |
完全符合你的需求,而且这个方法效率很高,哪怕你的DataFrame有几万行,也能快速处理,比手动遍历行的方式快得多。
内容的提问来源于stack exchange,提问作者JamesHudson81
相关产品推荐
相关产品推荐

