簡體   English   中英

Pandas - 如何對格式化為字符串的周和年數字進行排序?

[英]Pandas - how to sort week and year numbers formatted as strings?

我有一個像這樣的熊貓數據框,排序如下:

>>> weekly_count.sort_values(by='date_in_weeks', inplace=True)
>>> weekly_count.loc[:9,:]

  date_in_weeks count
0   1-2013      362
1   1-2014      378
2   1-2015      201
3   1-2016      294
4   1-2017      300
5   1-2018      297
6   10-2013     329
7   10-2014     314
8   10-2015     324
9   10-2016     322

在上面的數據中,第一列, date_in_weeks所有行都只是“一年的周數 - 年”。 我現在想這樣排序:

  date_in_weeks count
0   1-2013      362
6   10-2013     329
1   1-2014      378
7   10-2014     314
2   1-2015      201
8   10-2015     324
3   1-2016      294
9   10-2016     322
4   1-2017      300
5   1-2018      297

我該怎么做呢?

使用Series.argsort轉換為日期時間,格式為一年中的%W周數,鏈接

df = df.iloc[pd.to_datetime(df['date_in_weeks'] + '-0',format='%W-%Y-%w').argsort()]
print (df)
  date_in_weeks  count
0        1-2013    362
6       10-2013    329
1        1-2014    378
7       10-2014    314
2        1-2015    201
8       10-2015    324
3        1-2016    294
9       10-2016    322
4        1-2017    300
5        1-2018    297

您還可以轉換為 datetime ,分配給 df,然后對值進行排序並刪除額外的 col:

s = pd.to_datetime(df['date_in_weeks'],format='%M-%Y')
final = df.assign(dt=s).sort_values(['dt','count']).drop('dt',1)

print(final)

  date_in_weeks  count
0        1-2013    362
6       10-2013    329
1        1-2014    378
7       10-2014    314
2        1-2015    201
8       10-2015    324
3        1-2016    294
9       10-2016    322
4        1-2017    300
5        1-2018    297

您可以嘗試使用輔助列:

import pandas as pd
df = pd.DataFrame({'date_in_weeks':['1-2013','1-2014','1-2015','10-2013','10-2014'],
                   'count':[362,378,201,329,314]})
df['aux'] = df['date_in_weeks'].str.split('-')
df['aux_2'] = df['aux'].str.get(1).astype(int)
df['aux'] = df['aux'].str.get(0).astype(int)
df = df.sort_values(['aux_2','aux'],ascending=True)
df = df.drop(columns=['aux','aux_2'])
print(df)

輸出:

  date_in_weeks  count
0        1-2013    362
3       10-2013    329
1        1-2014    378
4       10-2014    314
2        1-2015    201

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM