python - 如何在Python中根据条件对多列进行分组并创建新列?

标签 python python-3.x pandas dataframe group-by

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

条件

如果两行或多行的 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 中完成此操作

最佳答案

这是一个分解问题。

一种方法是将各列合并成一个系列,然后 factorize , add 1 和 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

关于python - 如何在Python中根据条件对多列进行分组并创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60638354/

相关文章:

python - 如何在所有 Dictionary.Values() 中搜索字符串中的所有字符

Python3列出与某个文件夹名称相同级别的所有文件/目录

python - 如何在 PythonMagick 中进行重心组合

python - 如何确定特定类存在的对象数?

python-3.x - 在 raspbian/ubuntu 上,pip 一直指向 python 2.7 而不是 3.7

python - Python 中的光滑枢轴和映射

python - 索引错误 : list index out of range in python while something not found

python - 使用不同的 y 轴绘制 pandas 数据框中的条形图和线条

python - 使用 .format 将 float 转换为整数

python - Sentry中使用captureMessage时,如何选择不归类为error的类型?