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

如何基于DataFrame的Time列值与其他列名创建新列并重组数据?

问题:DataFrame列名重组与数据转换

现有如下dataframe_1:

Time        Not_paid Paid
0   morning     30       10  
1   afternoon   60       20
2   night       90       30

需要将Time列与其他列组合生成新列名(例如Not_paid_morning、Paid_afternoon),并将对应数据整合成一行,得到如下df_2:

Not_paid_morning Not_paid_afternoon Not_paid_night Paid_morning Paid_afternoon Paid_night
0   30               60                90             10           20             30

解决方案

提供两种基于Pandas的实现方式,适配不同场景需求:

方法一:索引重塑高效转换

适合数据量较大的场景,执行效率更高:

import pandas as pd

# 构造原始DataFrame(实际使用时替换为你的数据源)
dataframe_1 = pd.DataFrame({
    'Time': ['morning', 'afternoon', 'night'],
    'Not_paid': [30, 60, 90],
    'Paid': [10, 20, 30]
})

# 设置Time为索引,转置后重构列结构
df_2 = dataframe_1.set_index('Time').T.stack().unstack()
# 重命名列,格式为「原列名_时间」
df_2.columns = [f'{col}_{time}' for col, time in df_2.columns]
# 重置索引,得到单行结果
df_2 = df_2.reset_index(drop=True)

print(df_2)

方法二:手动遍历构建新列

逻辑直观易懂,适合新手理解转换过程:

import pandas as pd

dataframe_1 = pd.DataFrame({
    'Time': ['morning', 'afternoon', 'night'],
    'Not_paid': [30, 60, 90],
    'Paid': [10, 20, 30]
})

df_2 = pd.DataFrame()
# 遍历每一行,生成对应新列和值
for _, row in dataframe_1.iterrows():
    time_val = row['Time']
    df_2[f'Not_paid_{time_val}'] = [row['Not_paid']]
    df_2[f'Paid_{time_val}'] = [row['Paid']]

# 可选:按列名排序,让同类型列集中排列
df_2 = df_2[sorted(df_2.columns)]

print(df_2)

两种方法运行后均可得到目标df_2结构。

内容的提问来源于Stack Exchange,提问作者codelifevcd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:45:27