如何用Pandas高效比较行子集并计算差值/百分比变化?
单行实现Pandas分组计算状态切换的value变化
可以通过pivot结合assign实现单行代码完成需求,核心思路是先将每个id对应的in_test=True和in_test=False的value转成列,再直接计算差值与百分比变化:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'id': [1, 2, 1, 2], 'in_test': [True, True, False, False], 'value': [5, 5, 7, 8] }) # 单行实现计算 result = df.pivot(index='id', columns='in_test', values='value').assign(diff=lambda x: x[False]-x[True], pct_change=lambda x: (x[False]/x[True]-1)*100).reset_index()
执行后得到的结果表:
| id | True | False | diff | pct_change |
|---|---|---|---|---|
| 1 | 5 | 7 | 2 | 40.0 |
| 2 | 5 | 8 | 3 | 60.0 |
如果只需要保留id、差值和百分比变化列,可在末尾添加列筛选:
result = df.pivot(index='id', columns='in_test', values='value').assign(diff=lambda x: x[False]-x[True], pct_change=lambda x: (x[False]/x[True]-1)*100).reset_index()[['id', 'diff', 'pct_change']]
最终结果:
| id | diff | pct_change |
|---|---|---|
| 1 | 2 | 40.0 |
| 2 | 3 | 60.0 |
内容的提问来源于stack exchange,提问作者Olivier Maxwell
相关产品推荐
相关产品推荐

