大熊猫按组别的唯一性指数

时间:2018-09-07 16:39:32

标签: python pandas indexing group-by

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

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 个答案:

答案 0 :(得分:4)

a.sort do |a,b| [a,b].map {|e| e["name"] == "X" ? 0 : 1 }.zip( [b["year"],a["year"]],[a["name"],b["name"]] ).reduce(:<=>) end 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