标题中的日期时间并按季度和年份排序

问题描述 投票:0回答:1

我有一个数据框:

df = pd.DataFrame({ 
'1Q18': [ 1500, 1200, 950, 2200], 
'2Q18': [ 2340, 1234, 2000, 1230],
'3Q18': [2130, 2200, 2190, 2210],   
'FY18': [1000, 1900, 1500, 1800], 
'1Q19': [ 1500, 1200, 950, 2200],
'2Q19': [ 1500, 1200, 950, 2200],
'3Q19': [ 1500, 1200, 950, 2200],
'FY19': [ 1500, 1200, 950, 2200]})

我想以日期时间格式(季度和年份)制作标题,以便我可以对标题进行排序。我还想将所有列与季度数据合并在一起,以便数据框从左到右首先包含季度数据,然后是年度数据。结果应该如下所示:

df = pd.DataFrame({ 
'1Q18': [ 1500, 1200, 950, 2200], 
'2Q18': [ 2340, 1234, 2000, 1230],
'3Q18': [2130, 2200, 2190, 2210],   
'1Q19': [ 1500, 1200, 950, 2200],
'2Q19': [ 1500, 1200, 950, 2200],
'3Q19': [ 1500, 1200, 950, 2200],
'FY18': [1000, 1900, 1500, 1800],
'FY19': [ 1500, 1200, 950, 2200]})
python sorting datetime
1个回答
0
投票

首先,您需要将标题更改为日期时间格式。由于 pandas 不直接支持季度和年份,因此您可以将 '1Q18' 更改为 '2018Q1',然后将其转换为日期时间格式。 “FY18”可以被视为“2018Q4”,因此是“4Q18”。以下是您可以执行此操作的方法:

df.columns = pd.to_datetime(df.columns.str.replace('(Q\d)(\d{2})', r'20\2\1'), format='%YQ%q')

这行代码使用正则表达式将列名称重新格式化为 pandas 可以理解的格式,然后将它们转换为日期时间。

然后,您需要按升序对列进行排序:

df = df.sort_index(axis=1)

最后,您需要将数据框拆分为两部分,一份为季度数据,一份为年度数据,然后再次将它们连接起来:

quarter_cols = [col for col in df.columns if col.month != 12]
year_cols = [col for col in df.columns if col.month == 12]

df = pd.concat([df[quarter_cols], df[year_cols]], axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.