Python panda根据其他列中的条件覆盖值

时间:2018-04-03 18:01:23

标签: python pandas if-statement conditional

使用python pandas中的dataframe df:

Product_ID  | Category  | Sub_Cat
32432           0         Gadget
24085         Big Tech    Computer
54398         Small Tech  Gadget
97456           0         Computer

我正在开发一个新列,如果它不是0,我将使用Category值覆盖Sub_Cat值。

这是我要找的输出:

Product_ID  | Category  | Sub_Cat         | Cat_for_Analysis
32432           0         Gadget            Gadget
24085         Big Tech    Computer          Big Tech
54398         Small Tech  Gadget            Small Tech
97456           0         Computer          Computer

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以在ffill' 0'之后使用replacenp.nan

df['Cat_for_Analysis']=df.replace('0',np.nan)[['Category','Sub_Cat']].bfill(1).iloc[:,0]
df
Out[876]: 
   Product_ID   Category   Sub_Cat Cat_for_Analysis
0       32432          0    Gadget           Gadget
1       24085    BigTech  Computer          BigTech
2       54398  SmallTech    Gadget        SmallTech
3       97456          0  Computer         Computer

答案 1 :(得分:1)

使用np.where

df['Cat_for_Analysis'] = np.where(df['Category'] == '0', df['Sub_Cat'], df['Category'])

或等效的否定版本,如果它根据您的问题更直观地理解:

df['Cat_for_Analysis'] = np.where(df['Category'] != '0', df['Category'], df['Sub_Cat'])

任一方法的结果输出:

   Product_ID    Category   Sub_Cat Cat_for_Analysis
0       32432           0    Gadget           Gadget
1       24085    Big Tech  Computer         Big Tech
2       54398  Small Tech    Gadget       Small Tech
3       97456           0  Computer         Computer

答案 2 :(得分:1)

您也可以使用申请。

df["Cat_for_Analysis"] = df.apply(lambda row: row["Category"] if row["Category"] != 0 else row["Sub_Cat"], axis=1)