我有下面的Pandas数据框:此表包括每个客户持有的产品详细信息。
*输入表:
我想创建一个名为“Apple_ind”的标志/指标,根据每个客户持有的苹果(红苹果或绿色苹果)产品添加1或0。因此,结果 Dataframe 将如下所示:
*输出表:
bt1cpqcv1#
如果需要测试至少一列中的精确匹配,请将DataFrame.isin与DataFrame.any配合使用:
DataFrame.isin
DataFrame.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:
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))
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)
输出:
2条答案
按热度按时间bt1cpqcv1#
如果需要测试至少一列中的精确匹配,请将
DataFrame.isin
与DataFrame.any
配合使用:备选方案:
如果需要,检查
apple
子字符串,对非数字列使用Series.str.contains
:lokaqttq2#
如果要对所有产品应用相同的流程,可以执行以下操作:
输出: