Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫-如何对格式为字符串的周数和年数进行排序?_Python_Pandas_Dataframe_Sorting_Data Analysis - Fatal编程技术网

Python 熊猫-如何对格式为字符串的周数和年数进行排序?

Python 熊猫-如何对格式为字符串的周数和年数进行排序?,python,pandas,dataframe,sorting,data-analysis,Python,Pandas,Dataframe,Sorting,Data Analysis,我有一个像这样的熊猫数据框,排序如下: >>> 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

我有一个像这样的熊猫数据框,排序如下:

>>> 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 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

您还可以转换为datetime,分配给df,然后对值进行排序并删除额外的列:

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

使用转换为日期时间的格式
%W
年度周数:


欢迎来到SO。这不是一个讨论论坛或教程。请花点时间阅读和阅读该页面上的其他链接。花些时间学习教程和文档,练习示例。它会让你了解解决问题所需的工具。第一步:告诉给你这些数据的人使用ISO8601。很好的Anky,我试过做
pd.to_datetime()
,但一定是因为失败而错过了格式化。@CeliusStingher是的,格式化参数在这种情况下很有帮助:)@Anky_91-yop,也不确定几分钟是否是一周中的好选择
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
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