use*_*097 1 python sorting python-3.x pandas
我有一个大熊猫数据框,可以在结构上表示为:
id date status
0 12 2015-05-01 0
1 12 2015-05-22 1
2 12 2015-05-14 1
3 12 2015-05-06 0
4 45 2015-05-03 1
5 45 2015-05-12 1
6 45 2015-05-02 0
7 51 2015-05-05 1
8 51 2015-05-01 0
9 51 2015-05-23 1
10 51 2015-05-17 1
11 51 2015-05-03 0
12 51 2015-05-05 0
13 76 2015-05-04 1
14 76 2015-05-22 1
15 76 2015-05-08 0
Run Code Online (Sandbox Code Playgroud)
并且可以使用以下命令在 Python 3.4 中创建:
tempDF = pd.DataFrame({ 'id': [12,12,12,12,45,45,45,51,51,51,51,51,51,76,76,76],
'date': ['2015-05-01','2015-05-22','2015-05-14','2015-05-06','2015-05-03','2015-05-12','2015-05-02','2015-05-05','2015-05-01','2015-05-23','2015-05-17','2015-05-03','2015-05-05','2015-05-04','2015-05-22','2015-05-08'],
'status': [0,1,1,0,1,1,0,1,0,1,1,0,0,1,1,0]})
tempDF['date'] = pd.to_datetime(tempDF['date'])
Run Code Online (Sandbox Code Playgroud)
我想根据变量“id”将数据帧分组,根据“日期”在组内排序,然后获取每个组中的最后一个“状态”值。
到目前为止,我有:
tempGrouped = tempDF.groupby('id')
tempGrouped['status'].last()
Run Code Online (Sandbox Code Playgroud)
它产生:
id
12 0
45 0
51 0
76 0
Run Code Online (Sandbox Code Playgroud)
但是,在每种情况下状态都应为 1(与最新日期相关联的值)。在选择最后一个值之前,我无法弄清楚如何按日期对组进行排序。在尝试解决这个问题一段时间后,我可能有点雪盲,所以如果解决方案很明显,我提前道歉。
你可以这样排序和分组:
tempDF.sort(['id','date']).groupby('id')['status'].last()
Run Code Online (Sandbox Code Playgroud)