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

如何将DataFrame中8列合并为Date(datetime索引)与Moon Phase两列?

合并DataFrame列并按指定月相顺序排序

操作步骤

我们可以通过拆分原DataFrame的列组、添加排序标识、合并后排序的方式实现需求,具体操作如下:

  • 拆分原表为对应月相的子DataFrame
    原表的8列对应4组月相数据,依次拆分每组的Date和Moon Phase列,并添加用于排序的标识列(匹配指定的月相顺序):

    import pandas as pd
    
    # 假设原DataFrame名为df
    # 拆分新月组
    new_moon = df.iloc[:, [0, 1]].rename(columns={df.columns[0]: 'Date', df.columns[1]: 'Moon Phase'})
    new_moon['phase_rank'] = 0  # 新月对应顺序优先级0
    
    # 拆分上弦月组
    first_q = df.iloc[:, [2, 3]].rename(columns={df.columns[2]: 'Date', df.columns[3]: 'Moon Phase'})
    first_q['phase_rank'] = 1  # 上弦月对应顺序优先级1
    
    # 拆分满月组
    full_moon = df.iloc[:, [4, 5]].rename(columns={df.columns[4]: 'Date', df.columns[5]: 'Moon Phase'})
    full_moon['phase_rank'] = 2  # 满月对应顺序优先级2
    
    # 拆分下弦月组
    third_q = df.iloc[:, [6, 7]].rename(columns={df.columns[6]: 'Date', df.columns[7]: 'Moon Phase'})
    third_q['phase_rank'] = 3  # 下弦月对应顺序优先级3
    
  • 合并子表并处理日期索引
    将四个子表合并,把Date列转为datetime类型并设置为索引:

    # 合并所有子表
    combined_df = pd.concat([new_moon, first_q, full_moon, third_q], ignore_index=True)
    
    # 转换Date列为datetime类型
    combined_df['Date'] = pd.to_datetime(combined_df['Date'])
    
    # 设置Date为索引
    combined_df = combined_df.set_index('Date')
    
  • 按指定月相顺序排序并清理
    根据添加的phase_rank列排序,之后删除该辅助列:

    # 按指定月相顺序排序
    result_df = combined_df.sort_values('phase_rank').drop('phase_rank', axis=1)
    

最终效果

处理后的DataFrame仅保留Moon Phase列(Date为datetime类型索引),数据严格按照新月→上弦月→满月→下弦月的顺序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:20:18