我想根据另一列的子字符串搜索匹配来填充空列中的数据。 我已经根据此处提供的答案设法实现了这一目标:如何创建一个新列,其中根据现有列选择值?
具体来说,这个答案:
如果您有两个以上的条件,则使用 np.select。例如,如果你想要颜色是
当 (df['Set'] == 'Z') & (df['Type'] == 'A') 时为黄色 否则为蓝色,当 (df['Set'] == 'Z') & (df['Type'] == 'B') 否则当 (df['Type'] == 'B') 时为紫色 否则黑色, 然后使用
df = pd.DataFrame({'类型':list('ABBC'), '设置':list('ZZXY')}) 条件=[ (df['设置'] == 'Z') & (df['类型'] == 'A'), (df['设置'] == 'Z') & (df['类型'] == 'B'), (df['类型'] == 'B')] options = ['黄色', '蓝色', '紫色'] df['color'] = np.select(条件,选择,默认='黑色') 打印(df) 产生
设置类型颜色 0 Z A 黄色 1 Z B 蓝色 2 X B 紫色 3YC黑色
但是,我的问题是我正在处理 80 多种条件,因此对下面的每一行进行更改
条件=[ (df['设置'] == 'Z') & (df['类型'] == 'A'), ...80行代码 (df['类型'] == 'B')] 跟踪选项中参数值的正确位置变得很麻烦。 选择 = ['黄色', '蓝色', '紫色' ...80 个值 ]
是否有更好的方法通过配置文件来管理这两个列表? 这本质上是数据帧的输出,即
Z & A 黄色 Z&B 蓝色 X == B 紫色 Y默认C黑色
目前我正在使用一种解决方案,该解决方案为我需要满足的每个附加条件创建一条新线。
由于条件本质上是相等的,并且假设总是相同的一组列,因此您可以使用
merge
:
conditions = [('Z', 'A', 'yellow'),
('Z', 'B', 'blue'),
('X', 'B', 'purple'),
]
out = df.merge(pd.DataFrame(conditions, columns=['Set', 'Type', 'color']), how='left')
输出:
Type Set color
0 A Z yellow
1 B Z blue
2 B X purple
3 C Y NaN