如何基于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
相关产品推荐
相关产品推荐

