簡體   English   中英

根據 Panda 數據框中的條件為多個列分配不同的值

[英]Assign multiple columns different values based on conditions in Panda dataframe

我有數據框,需要根據現有列值條件添加新列,我正在尋找一種有效的方法。 例如:

df = pd.DataFrame({'a':[1,2,3],
                   'b':['x','y','x'],
                   's':['proda','prodb','prodc'],
                   'r':['oz1','0z2','oz3']})

我需要根據以下條件創建 2 個新列 ['c','d']

  If df['b'] == 'x':
     df['c'] = df['s']
     df['d'] = df['r']
  elif df[b'] == 'y':
     #assign different values to c, d columns

我們可以使用 numpy where 並在新列上應用條件,例如

df['c] = ny.where(condition, value)
df['d'] = ny.where(condition, value)

但我正在尋找是否有一種方法可以在單個語句中執行此操作,或者不使用 for 循環或多個 numpy 或 panda apply。

確切的輸出尚不清楚,但您可以將numpy.where與 2D 數據一起使用。

例如:

cols = ['c', 'd']
df[cols] = np.where(df['b'].eq('x').to_numpy()[:,None],
                    df[['s', 'r']], np.nan)

輸出:

   a  b      s    r      c    d
0  1  x  proda  oz1  proda  oz1
1  2  y  prodb  0z2    NaN  NaN
2  3  x  prodc  oz3  prodc  oz3

如果您想要多個條件,請使用np.select

cols = ['c', 'd']
df[cols] = np.select([df['b'].eq('x').to_numpy()[:,None],
                      df['b'].eq('y').to_numpy()[:,None]
                      ],
                     [df[['s', 'r']],
                      df[['r', 'a']]
                      ], np.nan)

但是,如果您有很多條件,則在這里使用循環更容易:

cols = ['c', 'd']
df[cols] = np.select([df['b'].eq(c).to_numpy()[:,None] for c in ['x', 'y']],
                     [df[repl] for repl in (['s', 'r'], ['r', 'a'])],
                     np.nan)

輸出:

   a  b      s    r      c    d
0  1  x  proda  oz1  proda  oz1
1  2  y  prodb  0z2    0z2    2
2  3  x  prodc  oz3  prodc  oz3

暫無
暫無

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

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