背景
我有一个如下所示的数据集:
product_name price
Women's pant 20.00
Men's Shirt 30.00
Women's Dress 40.00
Blue Shirt 30.00
...
我想创建一个名为
的新列gender
这将包含基于 product_name 字符串的值 Women、Men 或 Unisex
想要的结果应该是这样的:
product_name price gender
Women's pant 20.00 women
Men's Shirt 30.00 men
Women's Dress 40.00 women
Blue Shirt 30.00 unisex
我的方法
我想首先我应该创建一个新列,每行都有一个空白值。然后我应该遍历数据框中的每一行并检查字符串 df[product_name] 以查看它是男装、女装还是中性并填写相应的性别行值。
这是我的代码:
df['gender'] = ""
for product_name in df['product_name']:
if 'women' in product_name.lower():
df['gender'] = 'women'
elif 'men' in product_name.lower():
df['gender'] = 'men'
else:
df['gender'] = 'unisex'
但是,我得到以下结果:
product_name price gender
Women's pant 20.00 men
Men's Shirt 30.00 men
Women's Dress 40.00 men
Blue Shirt 30.00 men
我非常感谢这里的一些帮助,因为我是 python 和 pandas 库的新手。
最佳答案
您可以使用带有 if/else
的列表理解来获取输出:
df['gender'] = ['women' if 'women' in word
else "men" if "men" in word
else "unisex"
for word in df.product_name.str.lower()]
df
product_name price gender
0 Women's pant 20.0 women
1 Men's Shirt 30.0 men
2 Women's Dress 40.0 women
3 Blue Shirt 30.0 unisex
或者,您可以使用 numpy select实现相同的结果:
cond1 = df.product_name.str.lower().str.contains("women")
cond2 = df.product_name.str.lower().str.contains("men")
condlist = [cond1, cond2]
choicelist = ["women", "men"]
df["gender"] = np.select(condlist, choicelist, default="unisex")
通常,对于字符串,python的迭代要快得多;不过你必须测试一下。
关于python - 根据条件填充数据框行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62887405/