Pandas如何将DataFrame指定列特定值复制到新列上两行对应位置
实现方案
你可以通过以下几个Pandas核心函数实现需求:
isin():快速筛选符合条件的单元格shift():实现整列数据的行偏移where():按条件保留值,不符合的置为NaNfillna():将空值统一替换为0
代码示例
写法1(逻辑清晰易读)
import pandas as pd # 示例测试数据,可替换为你自己的DataFrame df = pd.DataFrame({ 'DATA_2': [0, 2, 1, 0, -1, 3, 0, 1, 0] }) # 初始化新列为全0 df['NEW_DATA'] = 0 # 筛选DATA_2值为1或-1的行 target = df[df['DATA_2'].isin([1, -1])] # 将目标值赋值到原位置向上偏移2行的对应位置 df.loc[target.index - 2, 'NEW_DATA'] = target['DATA_2'].values
写法2(链式调用更简洁)
# 一步完成创建新列的操作 df['NEW_DATA'] = df['DATA_2'].where(df['DATA_2'].isin([1, -1]))\ .shift(-2)\ .fillna(0)\ .astype(int)
效果说明
以示例测试数据为例,最终输出结果如下:
| 索引 | DATA_2 | NEW_DATA |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 2 | 0 |
| 2 | 1 | -1 |
| 3 | 0 | 0 |
| 4 | -1 | 1 |
| 5 | 3 | 0 |
| 6 | 0 | 0 |
| 7 | 1 | 0 |
| 8 | 0 | 0 |
符合DATA_2中1/-1向上偏移2行存入NEW_DATA,其余位置为0的要求。如果原符合条件的行在前2行(索引0、1),向上偏移后索引为负,Pandas会自动忽略,不会出现报错,对应位置保留0值即可。
内容的提问来源于stack exchange,提问作者Loreln
相关产品推荐
相关产品推荐

