You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:52:55