我正在尝试根据该行中的另一列是否包含字符串来填充pandas数据框中的新列。
例如,我列出了可能的颜色:
possible_colors = ['red', 'blue', 'green', orange', 'purple']
数据框包含假设产品的销售数据。产品名称的产品代码中包含一种颜色,我将创建一列,以将该产品标记为正确的颜色。
df = {'product': ['123red309','20424green098','2purple09183'],
'sales_qty': [20, 5, 10]}
如果产品列包含字符串“ green”,我想用字符串“ green”填充新的列Color。
我尝试使用以下代码:
for color in possible_colors:
df['Color'] = np.where(df.product.str.contains(color),color)
这给了我警告ValueError: either both or neither of x and y should be given
。
我的实际数据框当然是数千行,而不仅仅是3行,而我可能的颜色列表是数十种。
如何正确完成任务?谢谢!
答案 0 :(得分:1)
您可以使用series.str.extract()
:
df['color']=df['product'].str.extract(r'({})'.format('|'.join(possible_colors)))
print(df)
product sales_qty color
0 123red309 20 red
1 20424green098 5 green
2 2purple09183 10 purple
位置:r'({})'.format('|'.join(possible_colors))
收成:'(red|blue|green|orange|purple)'
答案 1 :(得分:1)
这是一种方法:
df['color'] = df['product'].apply(lambda x: ''.join(i for i in possible_colors
if i in x) or None)
product sales_qty color
0 123red309 20 red
1 20424green098 5 green
2 2purple09183 10 purple