在 python Pandas 中创建一个具有唯一值的新列 - 不分组

Create a new column with unique values from another in python Pandas - without grouping

我已经发布了一个问题,但我提出的问题很糟糕。 这是我的问题:

我有一个这样的数据框:

Col1 Col2 Col3 Col4 DESIRED COLUMN
SF 123 01/02 UP UP, WA
BF 543 30/12 DO DO, AF
QW 241 30/12 AF DO, AF
SF 123 01/02 WA UP, WA
QW 789 20/11 D D
SF 678 31/12 OT OT

我希望获得 DESIRED COLUMN。逻辑如下:

我的问题在哪里?我不知道我是否想多了,但是使用 groupby pandas 会减少数据帧的行数。我的 objective 只是添加一列,就像我上面显示的那样。

提前致谢!!!

使用GroupBy.transform with numpy.where:

m = df.Col1.eq('SF')

s1 = df.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)
print (df)
  Col1  Col2   Col3 Col4 DESIRED COLUMN
0   SF   123  01/02   UP         UP, WA
1   BF   543  30/12   DO         DO, AF
2   QW   241  30/12   AF         DO, AF
3   SF   123  01/02   WA         UP, WA
4   QW   789  20/11    D              D
5   SF   678  31/12   OT             OT

如果 NaNs 在 Col2, Col3 中可能的解决方案:

m = df.Col1.eq('SF')

df1 = df.fillna({'Col2':'nan', 'Col3':'nan'})
s1 = df1.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df1.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)