我有一个如下所示的数据框,我想基于列创建一个新列
条件
如果两行或多行的 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/