熊猫中按组的唯一性索引
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】:
groupby
和 rank
使用 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
【讨论】:
完美运行。非常感谢!以上是关于熊猫中按组的唯一性索引的主要内容,如果未能解决你的问题,请参考以下文章