python - Pandas Column 基于其他列中的值
问题描述
基本上,我想用“是”或“否”填写 Discount_Sub_Dpt 列,具体取决于该周该 Sub_Dpt 是否有折扣,不包括该行所在的产品(例如,我不想要任何用于考虑 A 的那一周是否有折扣的行,但仅适用于该子部门中的产品(在大多数情况下,有多个其他产品)。
我曾尝试将 groupby 与 Sub_Dpt 和 Week 一起使用,但无济于事。
有谁知道如何解决这个问题?
黄色列显然是代码的预期结果。
这是我使用的一些代码,我试图先创建列,然后更新值(但它都可能是错误的)(我也故意将数据框命名为 df1):
df1['Discount_Sub_Dpt'] = np.where((df1['Discount']=='Yes'),'Yes','No')
grps = []
grps.append(df1.Sub_Dpt.unique())
for x in grps:
x = str(x)
yes_weeks = df1.loc[(df1.Discount_SubDpt == 'Yes') & (df1.Sub_Dpt_Description == x),'Week'].unique()
df1.loc[df1['Week'].isin(yes_weeks) & df1['Sub_Dpt_Description'] == x, 'Discount_SubDpt'] = 'Yes'
解决方案
好的,这可能无法很好地扩展,但应该易于阅读。
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)
第一步创建一个 Multiindex 数据框。
接下来,我们得到所有产品的列表
接下来,对于每一行,我们取出同一周和子部门并删除产品。
在此列表中,如果有折扣,我们选择“是”,否则选择“否”
编辑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)
推荐阅读
- wordpress - 无法在 WordPress 中发送电子邮件
- javascript - 反应日期选择器版本 4.1.1。年份下拉标题箭头未显示
- c# - 如何将 .net 核心控制台应用程序转换为窗口服务?
- xamarin - Masterdetailpage 导航空白屏幕
- python - python中的csv写入器格式单元格
- android - 没有为类型“xxx”定义方法“xxx”。即使定义了方法,也会发生错误
- postgresql - 在 PostgreSQL 中以各种方式删除与已匹配用户的匹配
- python - 如何在熊猫中分组并从另一列添加值并计算它们
- powerbi - Power BI - 计算重复数据一次
- javascript - 如何有条件地将元素放入 Promise.all() 数组中?