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

Python:如何将偶数索引列与对应奇数列关联生成新DataFrame

解决方案

1. 模拟读取后的样本DataFrame

先模拟无表头Excel读取后的结构,还原你提到的列特征:

import pandas as pd
import numpy as np

# 模拟数据:偶数索引列是天数(无表头,显示Unnamed),奇数列是位置名称+对应数值
data = {
    'Unnamed: 0': [1, 2, 3, np.nan, np.nan],
    '位置A': [10, 20, 30, np.nan, np.nan],
    'Unnamed: 2': [0, 1, 4, 5, np.nan],
    '位置B': [5, 15, 25, 35, np.nan],
    'Unnamed: 4': [2, 3, np.nan, np.nan, np.nan],
    '位置C': [100, 200, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(data)

2. 核心转换逻辑

按需求生成目标DataFrame:

# 基准日期
date_value = pd.to_datetime('2023-01-01', format='%Y-%m-%d')

# 存储结果行的列表
result_rows = []

# 按步长2遍历列,每一组对应「天数列+位置数值列」
for i in range(0, len(df.columns), 2):
    days_col = df.columns[i]
    pos_col = df.columns[i+1]
    pos_name = pos_col  # 位置列名直接作为位置名称
    
    # 过滤空值行,提取有效数据
    valid_data = df[[days_col, pos_col]].dropna()
    
    # 逐行计算日期并生成结果数据
    for _, row in valid_data.iterrows():
        days_to_add = int(row[days_col])
        target_date = date_value + pd.Timedelta(days=days_to_add)
        result_rows.append({
            '位置名称': pos_name,
            '日期': target_date,
            '数值': row[pos_col]
        })

# 转换为最终DataFrame
final_df = pd.DataFrame(result_rows)

3. 输出结果示例

运行后final_df的结构如下:

位置名称日期数值
位置A2023-01-0210
位置A2023-01-0320
位置A2023-01-0430
位置B2023-01-015
位置B2023-01-0215
位置B2023-01-0525
位置B2023-01-0635
位置C2023-01-03100
位置C2023-01-04200

关键说明

  • 按步长2遍历列,确保每组数据对应正确的天数和位置
  • 用dropna()过滤空值行,避免无效数据混入结果
  • 通过pd.Timedelta实现日期偏移,保证日期计算精准
  • 最终整合为标准结构的DataFrame,便于后续分析或导出

内容的提问来源于stack exchange,提问作者whitepanda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:00