按col3分组计算col2的pct_change并生成col4列
Pandas按分组计算列的百分比变化生成新列
核心实现逻辑
按col3的取值分组,对每组内的col2列计算相邻行的百分比变化,再将每组的第一个值(默认是NaN)替换为0,最终生成col4列。
代码示例
1. 构建示例数据
import pandas as pd # 还原你提供的示例数据 data = { '创建日期': ['2021-02-17 00:00:00', '2021-02-17 00:00:00', '2021-10-05 00:00:00', '2021-10-05 00:00:00', '2021-09-15 00:00:00', '2021-10-02 00:00:00', '2021-10-05 00:00:00'], 'col2': [10.55, 12.55, 14.55, 10.55, 9.45, 8.65, 8.65], 'col3': [0, 0, 0, 0, 1, 1, 1] } df = pd.DataFrame(data)
2. 执行分组计算
# 按col3分组计算百分比变化,替换NaN为0得到col4 df['col4'] = df.groupby('col3')['col2'].pct_change().fillna(0) # 保留4位小数和手动计算的示例值对齐 df['col4'] = df['col4'].round(4)
最终结果
执行后得到的DataFrame与你提供的示例完全匹配:
| 创建日期 | col2 | col3 | col4 |
|---|---|---|---|
| 2021-02-17 00:00:00 | 10.55 | 0 | 0.0000 |
| 2021-02-17 00:00:00 | 12.55 | 0 | 0.1895 |
| 2021-10-05 00:00:00 | 14.55 | 0 | 0.1593 |
| 2021-10-05 00:00:00 | 10.55 | 0 | -0.2749 |
| 2021-09-15 00:00:00 | 9.45 | 1 | 0.0000 |
| 2021-10-02 00:00:00 | 8.65 | 1 | -0.0847 |
| 2021-10-05 00:00:00 | 8.65 | 1 | 0.0000 |
(注:示例中第6行col4为-0.08465,代码中round(4)后为-0.0847,属于合理的近似对齐)
内容的提问来源于stack exchange,提问作者AlessandroG
相关产品推荐
相关产品推荐

