Python 熊猫:如何按一列的日期对数据框行进行排序
所以我有两个不同的数据帧,我把它们连接起来。所有列都相同;但是,“日期”列有各种不同的日期,格式为M/D/YR 数据帧日期在序列的后面会被洗牌 是否有一种方法可以保存整个数据帧本身,并根据日期列中的日期对行进行排序。我还想保留日期的格式 所以基本上Python 熊猫:如何按一列的日期对数据框行进行排序,python,pandas,Python,Pandas,所以我有两个不同的数据帧,我把它们连接起来。所有列都相同;但是,“日期”列有各种不同的日期,格式为M/D/YR 数据帧日期在序列的后面会被洗牌 是否有一种方法可以保存整个数据帧本身,并根据日期列中的日期对行进行排序。我还想保留日期的格式 所以基本上 date people 6/8/2015 1 7/10/2018 2 6/5/2015 0 转换为: date people 6/5/2015 0 6/8/2015 1 7/10
date people
6/8/2015 1
7/10/2018 2
6/5/2015 0
转换为:
date people
6/5/2015 0
6/8/2015 1
7/10/2018 2
谢谢大家!
PS:我在另一篇文章中尝试了这些选项,但都不起作用为什么不简单呢
dataset[SortBy["date"]]
您能否提供您尝试过的内容或您的结构如何
如果需要按相反顺序排序,请执行以下操作:
dataset[SortBy["date"]][Reverse]
不确定你到底想得到什么,但如果你只想得到属于某个日期的人,只需使用
groupby
df = df.groupby('date').sum()
还是不同的团员
df = df.groupby('date').agg(lambda col: col.tolist()).reset_index()
然后你可以根据需要对它进行排序。也许这就是你要找的
试图详细说明可以做什么: 初始化/合并dataframe并将列转换为datetime类型
df= pd.DataFrame({'people':[1,2,0],'date': ['6/8/2015','7/10/2018','6/5/2015',]})
df.date=pd.to_datetime(df.date,format="%m/%d/%Y")
print(df)
输出:
date people
0 2015-06-08 1
1 2018-07-10 2
2 2015-06-05 0
date people
2 2015-06-05 0
0 2015-06-08 1
1 2018-07-10 2
date people
2 06/05/2015 0
0 06/08/2015 1
1 07/10/2018 2
date people
1961-04-12 1
1961-05-05 1
1961-07-21 1
1961-08-06 2
date people
04/12/61 1
05/05/61 1
07/21/61 1
08/06/61 2
按日期排序
df=df.sort_values('date')
print(df)
输出:
date people
0 2015-06-08 1
1 2018-07-10 2
2 2015-06-05 0
date people
2 2015-06-05 0
0 2015-06-08 1
1 2018-07-10 2
date people
2 06/05/2015 0
0 06/08/2015 1
1 07/10/2018 2
date people
1961-04-12 1
1961-05-05 1
1961-07-21 1
1961-08-06 2
date people
04/12/61 1
05/05/61 1
07/21/61 1
08/06/61 2
再次维护格式:
df['date']=df['date'].dt.strftime('%m/%d/%Y')
print(df)
输出:
date people
0 2015-06-08 1
1 2018-07-10 2
2 2015-06-05 0
date people
2 2015-06-05 0
0 2015-06-08 1
1 2018-07-10 2
date people
2 06/05/2015 0
0 06/08/2015 1
1 07/10/2018 2
date people
1961-04-12 1
1961-05-05 1
1961-07-21 1
1961-08-06 2
date people
04/12/61 1
05/05/61 1
07/21/61 1
08/06/61 2
尝试将“日期”列更改为Datetime,然后进行排序
import pandas as pd
df= pd.DataFrame({'people':[1,1,1,2],'date':
['4/12/1961','5/5/1961','7/21/1961','8/6/1961']})
df['date'] =pd.to_datetime(df.date)
df.sort_values(by='date')
输出:
date people
0 2015-06-08 1
1 2018-07-10 2
2 2015-06-05 0
date people
2 2015-06-05 0
0 2015-06-08 1
1 2018-07-10 2
date people
2 06/05/2015 0
0 06/08/2015 1
1 07/10/2018 2
date people
1961-04-12 1
1961-05-05 1
1961-07-21 1
1961-08-06 2
date people
04/12/61 1
05/05/61 1
07/21/61 1
08/06/61 2
要返回初始格式,请执行以下操作:
df['date']=df['date'].dt.strftime('%m/%d/%y')
输出:
date people
0 2015-06-08 1
1 2018-07-10 2
2 2015-06-05 0
date people
2 2015-06-05 0
0 2015-06-08 1
1 2018-07-10 2
date people
2 06/05/2015 0
0 06/08/2015 1
1 07/10/2018 2
date people
1961-04-12 1
1961-05-05 1
1961-07-21 1
1961-08-06 2
date people
04/12/61 1
05/05/61 1
07/21/61 1
08/06/61 2
什么是
排序
?它的定义是什么?和反向
?为什么这个答案有3张投票?因为最后会在日期上加上一些领先的“0”,你可以改为创建一个dummy\u date
列,它是datetime
,按此排序,然后删除它,使date
真正保持不变。但基本思想是一样的:谢谢。我又添加了一行代码以获得初始格式,并打印了输出