我在以显示当年发生的所有会议的方式对标题进行排序时遇到问题,而不是继续到下一年(M 是会议):
给定数据框:
Meeting M1/2023 M1/2024 M1/2025 M1/2026 M2/2023 M2/2024 M2/2025 M2/2026 M3/2023 M3/2024 (...)
Date
2023-01-02 13.75 11.7500 NaN NaN 13.75 11.2500 NaN NaN 13.75 10.9375 (...)
2023-01-03 13.75 11.7500 NaN NaN 13.75 11.2500 NaN NaN 13.75 10.8750 (...)
2023-01-04 13.75 11.8125 NaN NaN 13.75 11.4375 NaN NaN 13.75 11.0000 (...)
2023-01-05 13.75 11.7500 NaN NaN 13.75 11.3750 NaN NaN 13.75 11.0000 (...)
What the order should be:
M1/2023 M2/2023 M3/2023 M4/2023 M1/2024 M2/2024 M3/2024 M4/2024 M1/2025 M2/2025 (...)
Date
(...)
起初我尝试使用 df.sort_values() 重新排序,但结果是一样的。我的下一步是将标题作为字符串获取,以便我可以编辑数据并在会议号前面添加年份,这样 sort_valeus() 就可以工作:
headers_dict = {}
for i in df.columns:
headers_dict[i] = i.split('/')[1]+'_'+i.split('/')[0]
输出:
{'M1/2023': '2023_M1',
'M1/2024': '2024_M1',
'M1/2025': '2025_M1',
'M1/2026': '2026_M1',
'M2/2023': '2023_M2',
'M2/2024': '2024_M2',
'M2/2025': '2025_M2', (...)}
这部分有效,但我无法将编辑后的字符串放回 df (我尝试在此处使用 .reindex() )而不将所有数据转换为 NaN 。我应该怎么办?有没有办法做到这一点?抱歉我的英语不好。
只需执行以下操作
cols = df.columns.tolist()
new_cols = ... #rearrange columns as you wish
df = df[new_cols]
最后一行对数据框中的列重新排序