创建一个新的col并将其填充到熊猫的组和条件中

时间:2020-06-13 11:10:34

标签: python pandas

嘿,我有一个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

,我想为每个组创建一个新列,在其中添加相同的值ABCDEF

如果至少有一个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 

谢谢您的帮助

2 个答案:

答案 0 :(得分:2)

使用COL1上的DataFrame.groupbynp.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