pandas 在python中基于多列的列值创建指示器标志

k2arahey  于 2023-03-21  发布在  Python
关注(0)|答案(2)|浏览(138)

我有下面的Pandas数据框:
此表包括每个客户持有的产品详细信息。

*输入表:

我想创建一个名为“Apple_ind”的标志/指标,根据每个客户持有的苹果(红苹果或绿色苹果)产品添加1或0。因此,结果 Dataframe 将如下所示:

*输出表:

bt1cpqcv

bt1cpqcv1#

如果需要测试至少一列中的精确匹配,请将DataFrame.isinDataFrame.any配合使用:

df['Apple_ind'] = df.isin(['Green Apple','Red Apple']).any(axis=1).astype(int)

备选方案:

df['Apple_ind'] = np.where(df.isin(['Green Apple','Red Apple']).any(axis=1), 1, 0)

如果需要,检查apple子字符串,对非数字列使用Series.str.contains

df['Apple_ind'] = (df.select_dtypes('object')
                     .apply(lambda x: x.str.contains('apple'), case=False)
                     .any(axis=1)
                     .astype(int))
lokaqttq

lokaqttq2#

如果要对所有产品应用相同的流程,可以执行以下操作:

import re

products = ['apple', 'pears', 'jackfruit', 'watermelon']
pattern = re.compile(fr"\b({'|'.join(products)})\b", re.IGNORECASE)
ind = (df.melt('Cust No', ignore_index=False)['value']
         .str.extract(pattern, expand=False)
         .str.lower().dropna())
ind = pd.get_dummies(ind).groupby(level=0).max().add_suffix('_ind')
out = pd.concat([df, ind], axis=1)

输出:

相关问题