【问题标题】:Pandas - groupby all columns and mark in original dataframe [duplicate]Pandas - 按所有列分组并在原始数据框中标记[重复]
【发布时间】:2018-08-27 17:01:02
【问题描述】:

我有一个DataFrame,其中列'Id' 是独一无二的,还有'A', 'B', 'C' 等......

在不同的行中,所有值 'A', 'B', 'C' 都相同。我想给他们一个组名(从 1 开始的运行索引)。

例如:

df = pd.DataFrame({"A": [1, 1, 1, 2], "B": [3, 4, 4, 4], "C": [5, 5, 5, 5]})
df
Out[127]: 
   A  B  C
0  1  3  5
1  1  4  5
2  1  4  5
3  2  4  5

会变成

   A  B  C  grp
0  1  3  5    1
1  1  4  5    2
2  1  4  5    2
3  2  4  5    3

我知道我可以通过 ['A', 'B', 'C'] 分组并获取密钥,但是,我必须在未优化的情况下迭代密钥和 Dataframe。我没有以优化的方式做到这一点

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用GroupBy.ngroup:

    df['grp'] = df.groupby(['A', 'B', 'C']).ngroup() + 1
    print (df)
    
       A  B  C  grp
    0  1  3  5    1
    1  1  4  5    2
    2  1  4  5    2
    3  2  4  5    3
    

    如果列已排序:

    df['grp'] = pd.factorize([tuple(x) for x in df.values])[0] + 1
    

    【讨论】:

    • ngroup() ...该死的我使用了不带括号的 ngroup 并被卡住了。谢谢耶斯瑞尔!
    • 请您在回答重复之前更加小心吗?这是我今晚第二次抓到你了。
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 2019-03-20
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多