Python 熊猫根据其他列中的条件覆盖值
Python panda overwrite value based on conditional in other column
使用 python 中的数据框 df pandas:
Product_ID | Category | Sub_Cat
32432 0 Gadget
24085 Big Tech Computer
54398 Small Tech Gadget
97456 0 Computer
我正在创建一个新专栏,如果 Sub_Cat 值不为 0,我将在该专栏中覆盖该值。
这是我正在寻找的输出:
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
谢谢!
您可以在 replace
'0' 到 np.nan
之后使用 ffill
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
使用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
你也可以申请这个。
df["Cat_for_Analysis"] = df.apply(lambda row: row["Category"] if row["Category"] != 0 else row["Sub_Cat"], axis=1)
使用 python 中的数据框 df pandas:
Product_ID | Category | Sub_Cat
32432 0 Gadget
24085 Big Tech Computer
54398 Small Tech Gadget
97456 0 Computer
我正在创建一个新专栏,如果 Sub_Cat 值不为 0,我将在该专栏中覆盖该值。
这是我正在寻找的输出:
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
谢谢!
您可以在 replace
'0' 到 np.nan
ffill
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
使用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
你也可以申请这个。
df["Cat_for_Analysis"] = df.apply(lambda row: row["Category"] if row["Category"] != 0 else row["Sub_Cat"], axis=1)