我正在查看数据框中的月度数据。列标题都是字符串,从datetime转换而来。这是我到目前为止的最终输出:
Observable<byte[]> bytePartObservable = ...;
Observable<MyImage> images = bytePartObservable
.scan(new ImageBuilder(), ImageBuilder::append)
.filter(ImageBuilder::isReady)
.map(ImageBuilder::build);
images.subscribe( ... )
似乎列按字母顺序排序。有没有办法按月和年对这些类型字符串列进行排序?它是否涉及使用前缀?
答案 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]]