如何在Pandas中添加基于行差值与偏移计算的新列
解决方案:按指定规则生成新列
针对你的需求,这里提供两种简洁的实现方式,避免diff方法带来的NaN问题:
方法一:利用shift计算差值后重置偶数行
先通过shift(-1)获取下一行的值并计算差值,再将偶数行(原问题第2、4、6行)和最后一行设为0:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'Column A': [1, 2, 3, 4, 5, 6]}) # 计算下一行减当前行的差值 df['New'] = df['Column A'].shift(-1) - df['Column A'] # 将偶数索引行(对应原问题第2、4、6行)设为0 df.loc[df.index % 2 == 1, 'New'] = 0 # 最后一行因shift(-1)得到NaN,直接设为0 df.loc[df.index[-1], 'New'] = 0
方法二:直接定位奇数行赋值
先将新列初始化为0,再对原问题第1、3、5行(对应索引0、2、4)直接赋值差值:
import pandas as pd df = pd.DataFrame({'Column A': [1, 2, 3, 4, 5, 6]}) # 初始化新列为0 df['New'] = 0 # 给奇数位置行赋值:下一行值 - 当前行值 df.iloc[::2, df.columns.get_loc('New')] = df['Column A'].iloc[1::2].values - df['Column A'].iloc[::2].values
两种方法最终都会得到符合要求的结果,以示例数据为例,输出如下:
| Column A | New |
|---|---|
| 1 | 1 |
| 2 | 0 |
| 3 | 1 |
| 4 | 0 |
| 5 | 1 |
| 6 | 0 |
内容的提问来源于stack exchange,提问作者Dein_coder
相关产品推荐
相关产品推荐

