【问题标题】: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 循环,我怎样才能有效地做到这一点?非常感谢。

【问题讨论】:

    标签: python pandas indexing group-by


    【解决方案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
    

    【讨论】:

    • 完美运行。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2015-11-06
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多