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

