如果在 Pandas DataFrame 中另一列不为空,则将一列替换为另一列

Abd*_*man 6 python dataframe pandas

我正在使用 Pandas 处理数据框,如果另一个列值不为空,我必须在其中替换列。

我的数据框是这样的:

v_4        v5             s_5     vt_5     ex_5          pfv           pfv_cat
0-50      StoreSale     Clothes   8-Apr   above 100   FatimaStore       Shoes
0-50      StoreSale     Clothes   8-Apr   0-50        DiscountWorld     Clothes
51-100    CleanShop     Clothes   4-Dec   51-100      BetterUncle       Shoes
Run Code Online (Sandbox Code Playgroud)

所以,我想v_5pfvwhere pfvis not null替换,我该如何实现呢?

Yag*_*uso 6

您应该考虑使用 numpy where函数,它比所有 apply 方法运行得更快。

哪里基本上是 if else 函数的向量。第一个条目是一个带有条件的向量,第二个是真值,第三个是假值。这是它的外观:

import numpy as np
df['v_5'] = np.where(~df['pfv'].isnull(),df['pfv'],df['v_5']))
Run Code Online (Sandbox Code Playgroud)

祝你好运


jez*_*ael 5

因为缺失值是字符串null,所以使用:

df.loc[df['pfv'].ne('null'), 'v5'] = df["pfv"]
print (df)
      v_4             v5      s_5   vt_5       ex_5            pfv  pfv_cat
0    0-50      StoreSale  Clothes  8-Apr  above 100           null    Shoes
1    0-50  DiscountWorld  Clothes  8-Apr       0-50  DiscountWorld  Clothes
2  51-100    BetterUncle  Clothes  4-Dec     51-100    BetterUncle    Shoes
Run Code Online (Sandbox Code Playgroud)

如果缺失值是NaNNones (不是字符串),请使用Series.fillna

df['v5'] = df['pfv'].fillna(df['v5'])

print (df)
      v_4             v5      s_5   vt_5       ex_5            pfv  pfv_cat
0    0-50      StoreSale  Clothes  8-Apr  above 100            NaN    Shoes
1    0-50  DiscountWorld  Clothes  8-Apr       0-50  DiscountWorld  Clothes
2  51-100    BetterUncle  Clothes  4-Dec     51-100    BetterUncle    Shoes
Run Code Online (Sandbox Code Playgroud)


F B*_*het 0

您可以使用和中的apply方法:pandasnumpy

df['v_5'] = df.apply(lambda row: row['pfv'] if row['pfv']==np.NaN else row['v_5'], axis=1)
Run Code Online (Sandbox Code Playgroud)

或没有 numpy :

df['v_5'] = df.apply(lambda row: row['pfv'] if pd.isnull(row['pfv']) else row['v_5'], axis=1)
Run Code Online (Sandbox Code Playgroud)