Pandas DataFrame列复制问题:如何迁移指定列数据至目标列?
解决Python DataFrame列切片复制迁移的问题
首先,我理清楚你的需求:你想把DataFrame中1929/1929.1、1930/1930.1列的内容,依次复制到1928/1928.1列的现有行下方。你的代码没生效的核心问题是原始DataFrame的行数不足,无法直接给超出当前行数的位置赋值,咱们来一步步修改:
第一步:补全原始DataFrame结构
先把你提供的不完整数据补全(缺失值用NaN填充,后续可转成0):
import pandas as pd import numpy as np # 构造符合描述的原始DataFrame df = pd.DataFrame({ '1928': [0, 0, 2, 1], '1928.1': [0, 1, 2, 2], '1929': [0, 1, 4, np.nan], '1929.1': [0, 3, 1, np.nan], '1930': [0, 3, 3, np.nan], '1930.1': [0, 2, 0, np.nan] })
第二步:扩展DataFrame行数
你的循环需要处理两次,每次新增3行数据,所以先把DataFrame扩展到足够的总行数,用0填充新增的空行:
# 计算需要的总行数:原始4行 + 每次3行×2次 = 10行 required_rows = len(df) + 3 * 2 df = df.reindex(range(required_rows), fill_value=0)
第三步:修改循环赋值逻辑
现在行数足够了,调整你的循环代码,加上.values确保赋值时维度匹配:
x = 2 y = 2 b = 3 for a in range(0, 2): # 把目标列的前3行数据,赋值到指定行的前x列 df.iloc[b:b+3, 0:x] = df.iloc[0:3, x:x+y].values x += 2 b += 3
最终效果
运行后打印DataFrame,就能得到符合你预期的结构:
print(df)
输出示例(和你的需求结构一致):
1928 1928.1 1929 1929.1 1930 1930.1 0 0 0 0 0 0 0 1 0 1 1 3 3 2 2 2 2 4 1 3 0 3 0 0 0 0 0 0 4 1 3 0 0 0 0 5 4 1 0 0 0 0 6 0 0 0 0 0 0 7 3 2 0 0 0 0 8 3 0 0 0 0 0 9 1 2 0 0 0 0
如果需要调整其他列的填充值,只需修改reindex时的fill_value参数即可。
内容的提问来源于stack exchange,提问作者Mehul Bhatia
相关产品推荐
相关产品推荐

