如何在Pandas DataFrame中基于同列其他行计算目标列值?
解决方案
计算规则(原英文公式翻译)
对于第i行(从0开始计数):
- 若i不是最后一行,
desired值等于当前行的col值减去下一行的col值; - 若i是最后一行,
desired值等于当前行的col值。
以下是实现该逻辑的 Pandas 代码:
import pandas as pd a = {'idx': range(8), 'col': [47,33,23,33,32,31,22,5], } df = pd.DataFrame(a) # 计算 desired 列:当前 col 减去下一行 col df['desired'] = df['col'] - df['col'].shift(-1) # 填充最后一行的 NaN 为当前 col 值 df['desired'].iloc[-1] = df['col'].iloc[-1] print(df)
运行上述代码后,输出结果与期望完全一致:
idx col desired 0 0 47 14 1 1 33 10 2 2 23 -10 3 3 33 1 4 4 32 1 5 5 31 9 6 6 22 17 7 7 5 5
代码说明
df['col'].shift(-1):将col列向下偏移一行,每一行的值变为下一行的col值,最后一行因无后续数据变为NaN;- 原
col列减去偏移后的列,即可得到除最后一行外的所有desired值; - 最后一行通过直接赋值为当前
col值,填补偏移产生的NaN。
内容的提问来源于stack exchange,提问作者Abhishek Jain
相关产品推荐
相关产品推荐

