簡體   English   中英

如何根據是否存在另一組列來創建新列

[英]How to create new columns based on whether another group of Columns Exists

我的問題如下:

我有一個 dataframe df ,它有 5 列('A', 'B', 'C', 'D', 'E')

現在,我希望根據它們所在的列將這些列組合起來用於其他目的,例如GP1 = [ 'A', 'B', 'D']GP2 = ['C','E']我將在其上創建兩個新列。

    df['Group1'] = df[GP1].min(axis=1)

    df['Group2'] = df[GP2].max(axis=1)

但是,根據數據,有可能很多時候說“A”列(或者說“D”或“B”或可能全部)可能從第一組中丟失,或者可能是“C”或“E”列'(或兩者)可能從第二組中丟失。

所以我正在尋找的是做一些事情,這樣代碼將檢查第一組或第二組中的任何列是否丟失,然后如果所有列都存在於一個組中,則只創建新的“Group1”或“Group2”並且如果任何集合中的任何列丟失,它將跳過創建新列。

我怎樣才能做到這一點。 我正在嘗試循環,但沒有幫助並成為復雜的邏輯。

兩個集合中的所有列都存在的示例:

       df_in
              A   B   C  D   E
              1   2   3  4   5
              2   4   6  2   3
              1   0   2  4   2
              
    
      df_out 
              A   B   C  D   E   Group1  Group2
              1   2   3  4   5    1       5
              2   4   6  2   3    2       6
              1   0   2  4   2    0       2

當第二組中的 E 列不存在時的示例:

        df_in 
              A   B   C  D   
              1   2   3  4   
              2   4   6  2   
              1   0   2  4   
              
    
      df_out
              A   B   C  D  Group1  
              1   2   3  4   1       
              2   4   6  2   2       
              1   0   2  4   0  

當集合 A 中缺少 A 和 D 時(並且集合/組 1 中只有 B)

    df_in 
              B   C  E
              2   3  5
              4   6  3
              0   2  2
              
    
    df_out
              B   C   E  Group2
              2   3   5    5
              4   6   3    6
              0   2   2    2

以下情況是缺少集合 1 中的 A 和缺少集合 2 中的 C:

    df_in 
              B   D   E
              2   4   5
              4   2   3
              0   4   2
              
    
    df_out 
              B   D   E
              2   4   5
              4   2   3
              0   4   2

在這個方向上的任何幫助將不勝感激。 謝謝

在這里你go,我想你可以使用這個:

df_out = (df_in.assign(Group1=df_in.reindex(gp1, axis=1).dropna().min(axis=1), 
                      Group2=df_in.reindex(gp2, axis=1).dropna().max(axis=1))
               .dropna(axis=1, how='all'))

MCVE:

df_in  = pd.read_clipboard() #Read from copy of df_in in the question above
print(df_in)

#   A  B  C  D  E
# 0  1  2  3  4  5
# 1  2  4  6  2  3
# 2  1  0  2  4  2

gp1 = ['A','B','D']
gp2 = ['C','E']

df_out = (df_in.assign(Group1=df_in.reindex(gp1, axis=1).dropna().min(axis=1), 
                      Group2=df_in.reindex(gp2, axis=1).dropna().max(axis=1))
               .dropna(axis=1, how='all'))

print(df_out)

#   A  B  C  D  E  Group1  Group2
# 0  1  2  3  4  5       1       5
# 1  2  4  6  2  3       2       6
# 2  1  0  2  4  2       0       2

df_in_copy=df_in.copy() #make a copy to reuse later
df_in = df_in.drop('E', axis=1) #Drop Col E
print(df_in)

#    A  B  C  D
# 0  1  2  3  4
# 1  2  4  6  2
# 2  1  0  2  4

df_out = (df_in.assign(Group1=df_in.reindex(gp1, axis=1).dropna().min(axis=1), 
                      Group2=df_in.reindex(gp2, axis=1).dropna().max(axis=1))
               .dropna(axis=1, how='all'))
print(df_out)

#    A  B  C  D  Group1
# 0  1  2  3  4       1
# 1  2  4  6  2       2
# 2  1  0  2  4       0


df_in = df_in_copy.copy() #Copy for copy create
df_in = df_in.drop(['A','D'], axis=1) #Drop Columns A and D
print(df_in)

#    B  C  E
# 0  2  3  5
# 1  4  6  3
# 2  0  2  2

df_out = (df_in.assign(Group1=df_in.reindex(gp1, axis=1).dropna().min(axis=1), 
                      Group2=df_in.reindex(gp2, axis=1).dropna().max(axis=1))
               .dropna(axis=1, how='all'))
print(df_out)

#    B  C  E
# 0  2  3  5
# 1  4  6  3
# 2  0  2  2

暫無
暫無

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

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