首页 > 解决方案 > 如何在 Python 中按多列分组并根据条件创建新列?

问题描述

我有一个如下所示的数据框,我想创建一个基于列的新列

健康)状况

如果两行或多行包含 A 列和 B 列的相同值且 C 列是唯一的,则应为行分配唯一的组名

输入

A           B        C   
Payment    Mark      2  
Payment    Mark      3   
Delayed    Charles   2  
Delayed    Charles   4   
Held       Mark      3   
Held       Charles   4   
Payment    Mark      2   
Payment    Mark      3   
Delayed    Charles   4   
Held       Charles   4  

预期产出

  A        B         C   Cluster
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   2   C3
Delayed    Charles   4   C4
Held       Mark      3   C5
Held       Charles   4   C6
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   4   C4
Held       Charles   4   C6

如何在 python 中做到这一点

标签: pythonpython-3.xpandasdataframegroup-by

解决方案


这是一个factorize问题。

一种方法是将列加入单个系列和factorize, add1 和开头:add C

df['Cluster'] = (pd.Series(df[['A','B','C']].astype(str).agg(''.join,1)
               .factorize()[0]).add(1).astype(str).radd('C'))
print(df)

另一种方式将是类似的,但与groupby.ngroup

df['Cluster'] = (df.groupby(['A','B','C'],sort=False).ngroup()
                .add(1).astype(str).radd('C'))

         A        B  C Cluster
0  Payment     Mark  2      C1
1  Payment     Mark  3      C2
2  Delayed  Charles  2      C3
3  Delayed  Charles  4      C4
4     Held     Mark  3      C5
5     Held  Charles  4      C6
6  Payment     Mark  2      C1
7  Payment     Mark  3      C2
8  Delayed  Charles  4      C4
9     Held  Charles  4      C6

推荐阅读