红颜莎娜
好的,这可能无法很好地扩展,但应该易于阅读。df1 = pd.DataFrame(data= [[ 'A', 1, 'Toys', 'Yes', ],[ 'A', 2, 'Toys', 'No', ],[ 'A', 3, 'Toys', 'No', ],[ 'A', 4, 'Toys', 'Yes', ],[ 'B', 1, 'Toys', 'No', ],[ 'B', 2, 'Toys', 'Yes', ],[ 'B', 3, 'Toys', 'No', ],[ 'B', 4, 'Toys', 'Yes', ],[ 'C', 1, 'Candy', 'No', ],[ 'C', 2, 'Candy', 'No', ],[ 'C', 3, 'Candy', 'Yes', ],[ 'C', 4, 'Candy', 'Yes', ],[ 'D', 1, 'Candy', 'No', ],[ 'D', 2, 'Candy', 'No', ],[ 'D', 3, 'Candy', 'No', ],[ 'D', 4, 'Candy', 'No', ],], columns=['Product', 'Week', 'Sub_Dpt', 'Discount'])df2 = df1.set_index(['Product', 'Week', 'Sub_Dpt'])products = df1.Product.unique()df1['Discount_SubDpt'] = df1.apply(lambda x: 'Yes' if 'Yes' in df2.loc[(list(products[products != x['Product']]), x['Week'], x['Sub_Dpt']), 'Discount'].tolist() else 'No', axis=1)第一步创建一个Multindex数据框。接下来,我们获得所有产品的清单接下来,对于每一行,我们取出同一周和子部门并删除产品。在此列表中,如果有折扣,我们选择“是”,否则选择“否”编辑1:如果您不想创建另一个数据框(节省内存,但是会慢一些)df1['Discount_SubDpt'] = df1.apply(lambda x: 'Yes' if 'Yes' in df1.loc[(df1['Product'] != x['Product']) & (df1['Week'] == x['Week']) & (df1['Sub_Dpt'] == x['Sub_Dpt']), 'Discount'].tolist() else 'No', axis=1)