按月和年对数据框列进行排序

时间:2018-05-31 18:48:38

标签: python pandas sorting dataframe

我正在查看数据框中的月度数据。列标题都是字符串,从datetime转换而来。这是我到目前为止的最终输出:

Observable<byte[]> bytePartObservable = ...;

Observable<MyImage> images = bytePartObservable
    .scan(new ImageBuilder(), ImageBuilder::append)
    .filter(ImageBuilder::isReady)
    .map(ImageBuilder::build);

images.subscribe( ... )

似乎列按字母顺序排序。有没有办法按月和年对这些类型字符串列进行排序?它是否涉及使用前缀?

2 个答案:

答案 0 :(得分:2)

您可以将列名称转换为日期时间,然后对它们进行排序:

df.columns = pd.to_datetime(df.columns, format='%b %y')

df = df[sorted(df.columns)]

>>> df
           2018-01-01  2018-02-01  2018-03-01
Flavor                                       
Vanilla          10.0        16.0         0.0
Chocolate        20.0        20.0        16.0

如果您想要返回原始字符串列名,只需添加:

df.columns = df.columns.strftime('%b %y')

>>> df
           Jan 18  Feb 18  Mar 18
Flavor                           
Vanilla      10.0    16.0     0.0
Chocolate    20.0    20.0    16.0

另一种方法是使用带有密钥的sorted在一行中完成所有操作(对于该想法可归功于@SpghttCd):

df[sorted(df.columns, key = lambda x: pd.to_datetime(x, format='%b %y'))]

答案 1 :(得分:2)

你可以使用,制作一个dict,其中键是原始列名,值是他们的enter butter Start: 16:25:43,42 Ready: 16:25:46,94 Secs : 3,52 个对象,然后按值排序该dict,只是为了对它进行排序,然后获得所需的df。

datetime

输出:

import operator
sorted_dict = sorted(dict(zip(df.columns,pd.to_datetime(df.columns, format='%b %y'))).items(), key=operator.itemgetter(1))
df[[i[0] for i in sorted_dict]]
相关问题