处理大量条件时如何根据另一列的子字符串填充一列中的数据

问题描述 投票:0回答:1

我想根据另一列的子字符串搜索匹配来填充空列中的数据。 我已经根据此处提供的答案设法实现了这一目标:如何创建一个新列,其中根据现有列选择值?

具体来说,这个答案:

如果您有两个以上的条件,则使用 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黑色

目前我正在使用一种解决方案,该解决方案为我需要满足的每个附加条件创建一条新线。

python pandas dataframe
1个回答
0
投票

由于条件本质上是相等的,并且假设总是相同的一组列,因此您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.