嘿,我有一个df,例如:
Groups COL1
G1 AB
G1 CD
G1 EF
G1 EF
G2 CD
G2 CD
G3 CD
G3 EF
G3 EF
G4 EF
G4 AB
G4 AB
G5 EF
G5 EF
,我想为每个组创建一个新列,在其中添加相同的值AB
,CD
或EF
。
如果至少有一个AB
,则全部都有AB
,
如果没有AB
,但至少在CD
上,则全部都有CD
并且
如果只有EF
,则全部都有CF
。
基本上如此:
AB>CD>EF
在这里我应该得到:
Groups COL1 NewCOL
G1 AB AB
G1 CD AB
G1 EF AB
G1 EF AB
G2 CD CD
G2 CD CD
G3 CD CD
G3 EF CD
G3 EF CD
G4 EF AB
G4 AB AB
G4 AB AB
G5 EF EF
G5 EF EF
谢谢您的帮助
答案 0 :(得分:2)
使用COL1
上的DataFrame.groupby
和np.select
:
df['NewCol'] = (
df.groupby('Groups')['COL1']
.transform(
lambda s: np.select(
[s.eq('AB').any(), s.eq('CD').any(), s.eq('EF').any()], ['AB', 'CD', 'EF']))
)
# print(df)
Groups COL1 NewCol
0 G1 AB AB
1 G1 CD AB
2 G1 EF AB
3 G1 EF AB
4 G2 CD CD
5 G2 CD CD
6 G3 CD CD
7 G3 EF CD
8 G3 EF CD
9 G4 EF AB
10 G4 AB AB
11 G4 AB AB
12 G5 EF EF
13 G5 EF EF
答案 1 :(得分:1)
另一种解决方案,使用pandas.Categorical
:
df['COL1'] = pd.Categorical(df['COL1'], ['AB', 'CD', 'EF'], ordered=True)
df['NewCol'] = df.groupby('Groups')['COL1'].transform('min')
print(df)
打印:
Groups COL1 NewCol
0 G1 AB AB
1 G1 CD AB
2 G1 EF AB
3 G1 EF AB
4 G2 CD CD
5 G2 CD CD
6 G3 CD CD
7 G3 EF CD
8 G3 EF CD
9 G4 EF AB
10 G4 AB AB
11 G4 AB AB
12 G5 EF EF
13 G5 EF EF