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

基于DataFrame现有列创建新列并拆分指定列的技术需求

问题描述

给定如下Pandas DataFrame:

import pandas as pd

data = {
    'datetime': ['2023-01-02 12:00:00', '2023-01-02 12:00:00', 
                 '2023-01-03 12:00:00', '2023-01-03 12:00:00', 
                 '2023-01-04 12:00:00', '2023-01-04 12:00:00'],
    'day_fetched': ['2023-01-01 12:00:00', '2023-01-02 12:00:00', 
                    '2023-01-02 12:00:00', '2023-01-03 12:00:00', 
                    '2023-01-03 12:00:00', '2023-01-04 12:00:00'],
    'col_a': [100, 120, 140, 160, 200, 430],
    'col_b': [200, 400, 500, 700, 300, 200]
}
df = pd.DataFrame(data)

需求一:创建day_ahead列

当datetime与day_fetched的日期部分不同时,day_ahead取值为2;日期部分相同时取值为1。预期中间结果:

datetime            day_fetched         col_a col_b day_ahead
0  2023-01-02 12:00:00 2023-01-01 12:00:00 100  200    2
1  2023-01-02 12:00:00 2023-01-02 12:00:00 120  400    1
2  2023-01-03 12:00:00 2023-01-02 12:00:00 140  500    2
3  2023-01-03 12:00:00 2023-01-03 12:00:00 160  700    1
4  2023-01-04 12:00:00 2023-01-03 12:00:00 200  300    2
5  2023-01-04 12:00:00 2023-01-04 12:00:00 430  200    1

需求二:拆分列

基于day_ahead列,将col_a拆分为col_a_1和col_a_2,col_b拆分为col_b_1和col_b_2:

  • 当day_ahead=1时,col_a的值放入col_a_1,col_b的值放入col_b_1,对应_2列设为NaN
  • 当day_ahead=2时,col_a的值放入col_a_2,col_b的值放入col_b_2,对应_1列设为NaN
    预期最终结果:
datetime            day_fetched         col_a_1 col_a_2 col_b_1 col_b_2 day_ahead
0  2023-01-02 12:00:00 2023-01-01 12:00:00 NaN     200     NaN     200     2
1  2023-01-02 12:00:00 2023-01-02 12:00:00 120     NaN     100     NaN     1
2  2023-01-03 12:00:00 2023-01-02 12:00:00 NaN     500     NaN     200     2
3  2023-01-03 12:00:00 2023-01-03 12:00:00 160     NaN     100     NaN     1
4  2023-01-04 12:00:00 2023-01-03 12:00:00 NaN     300     NaN     200     2
5  2023-01-04 12:00:00 2023-01-04 12:00:00 430     NaN     100     NaN     1
实现方法

步骤1:处理日期列并创建day_ahead

先将字符串类型的日期转换为Pandas datetime类型,再通过日期比较生成目标列:

# 转换为datetime类型
df['datetime'] = pd.to_datetime(df['datetime'])
df['day_fetched'] = pd.to_datetime(df['day_fetched'])

# 用矢量化操作生成day_ahead(效率高于apply,适合大数据量)
import numpy as np
df['day_ahead'] = np.where(
    df['datetime'].dt.date == df['day_fetched'].dt.date,
    1,
    2
)

步骤2:拆分列

使用where方法根据day_ahead的条件赋值,不符合条件的位置自动填充NaN:

# 拆分col_a
df['col_a_1'] = df['col_a'].where(df['day_ahead'] == 1)
df['col_a_2'] = df['col_a'].where(df['day_ahead'] == 2)

# 拆分col_b
df['col_b_1'] = df['col_b'].where(df['day_ahead'] == 1)
df['col_b_2'] = df['col_b'].where(df['day_ahead'] == 2)

# 可选:调整列顺序匹配预期结果
df = df[['datetime', 'day_fetched', 'col_a_1', 'col_a_2', 'col_b_1', 'col_b_2', 'day_ahead']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:15:54