簡體   English   中英

創建一個新的 col 並將其填充到 pandas 的組和條件中

[英]Create a new col and fill it within groups and conditions in 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 

謝謝您的幫助

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

另一種解決方案,使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM