繁体   English   中英

在 Groupby 组中对 Pandas 数据框数据进行排序

[英]Sorting Pandas dataframe data within Groupby groups

我有一个大熊猫数据框,可以在结构上表示为:

      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

并且可以使用以下命令在 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'])

我想根据变量“id”将数据帧分组,根据“日期”在组内排序,然后获取每个组中的最后一个“状态”值。

到目前为止,我有:

tempGrouped = tempDF.groupby('id')
tempGrouped['status'].last()

它产生:

id
12    0
45    0
51    0
76    0

但是,在每种情况下状态都应为 1(与最新日期相关联的值)。 在选择最后一个值之前,我无法弄清楚如何按日期对组进行排序。 在尝试解决这个问题一段时间后,我可能有点雪盲,所以如果解决方案很明显,我提前道歉。

你可以这样排序和分组:

tempDF.sort(['id','date']).groupby('id')['status'].last()

我有一个大熊猫数据框,可以从结构上表示为:

      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

并且可以使用以下命令在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'])

我想根据变量“ id”将数据框分为几组,根据“日期”在各组内排序,然后获取每个组内的最后一个“状态”值。

到目前为止,我有:

tempGrouped = tempDF.groupby('id')
tempGrouped['status'].last()

产生:

id
12    0
45    0
51    0
76    0

但是,在每种情况下,状态均应为1(与最新日期相关联的值)。 在选择最后一个值之前,我无法解决如何按日期对组进行排序。 尝试解决了一段时间后,我可能有点盲目,所以如果解决方案显而易见,我会提前道歉。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM