熊猫中按组的唯一性索引

Posted

技术标签:

【中文标题】熊猫中按组的唯一性索引【英文标题】:Uniqueness index by group in pandas 【发布时间】:2019-02-13 01:05:10 【问题描述】:

我有一个基本上看起来像这样的数据框:

A=pd.DataFrame('Id':[1,1,1,1,2,2,2],'Time'[0,0.5,1.2,1.2,0.2,0.2,0.5])
idx Id  Time
0   1   0.0
1   1   0.5
2   1   1.2
3   1   1.2
4   2   0.2
5   2   0.2
6   2   0.5
7   3   1.7

我想为每个Id的不同时间值分配一个时间排序索引。所以基本上这个列应该给这个特定 ID 的时间值排序。此外,具有相同 Id 和相同时间的条目应该具有相同的排序索引。那么我应该有:

idx Id  Time Time_order
0   1   0.0  0
1   1   0.5  1
2   1   1.2  2
3   1   1.2  2
4   2   0.2  0
5   2   0.2  0
6   2   0.5  1
7   3   1.7  0

如果没有 for 循环,我怎样才能有效地做到这一点?非常感谢。

【问题讨论】:

【参考方案1】:

groupbyrank 使用 method='dense'

A.assign(Time_order=A.groupby('Id').Time.rank(method='dense') - 1)

   idx  Id  Time  Time_order
0    0   1   0.0         0.0
1    1   1   0.5         1.0
2    2   1   1.2         2.0
3    3   1   1.2         2.0
4    4   2   0.2         0.0
5    5   2   0.2         0.0
6    6   2   0.5         1.0
7    7   3   1.7         0.0

astype(int)如果你真的想要

A.assign(Time_order=A.groupby('Id').Time.rank(method='dense').astype(int) - 1)

   idx  Id  Time  Time_order
0    0   1   0.0           0
1    1   1   0.5           1
2    2   1   1.2           2
3    3   1   1.2           2
4    4   2   0.2           0
5    5   2   0.2           0
6    6   2   0.5           1
7    7   3   1.7           0

pd.factorize

A.assign(Time_order=A.groupby('Id').Time.transform(lambda x: pd.factorize(x, sort=True)[0]))

   idx  Id  Time  Time_order
0    0   1   0.0         0.0
1    1   1   0.5         1.0
2    2   1   1.2         2.0
3    3   1   1.2         2.0
4    4   2   0.2         0.0
5    5   2   0.2         0.0
6    6   2   0.5         1.0
7    7   3   1.7         0.0

【讨论】:

完美运行。非常感谢!

以上是关于熊猫中按组的唯一性索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据化框架中按组查找唯一值

在熊猫中按组顺序计算差异

在大熊猫DataFrame中按组删除异常值的更快方法[重复]

如何在熊猫中按两列计算唯一记录?

当日期不唯一时,在熊猫中按日期分组后计数观察值

按组的每个出现值构建计数列