【发布时间】:2022-01-05 16:22:59
【问题描述】:
我使用以下数据框
df = pd.DataFrame({'class': 'a a aa aa b b '.split(),
'item': [5,5,7,7,7,6],
'last_PO_code': ['103','103','103','104','103','104'],
'qty': [5,4,7,6,7,6]
})
我在上面应用这个规则
regle1 = lambda x: True if x['last_PO_code'].all() == "103" else False
像这样在grouby上有一栏
df['regle1'] = df['class'].map(df.groupby(['class']).apply(regle1))
我有以下结果,很好
class item last_PO_code qty regle1
0 a 5 103 5 True
1 a 5 103 4 True
2 aa 7 103 7 False
3 aa 7 104 6 False
4 b 7 103 7 False
5 b 6 104 6 False
但是当我想按类和项目分组时,我有这个结果
df['regle1'] = df['class'].map(df.groupby(['class','item']).apply(regle1))
class item last_PO_code qty regle1
0 a 5 103 5 NaN
1 a 5 103 4 NaN
2 aa 7 103 7 NaN
3 aa 7 104 6 NaN
4 b 7 103 7 NaN
5 b 6 104 6 NaN
有人可以帮我理解吗??
【问题讨论】:
-
当您
groupby两列时,您的结果索引现在是一个多索引。这意味着当您只是map类列时没有匹配项,因为您的索引实际上是元组(类,项)。相反,您应该merge返回结果,以便它在类和项目上都匹配,或者您可以使用groupby+transform将结果广播回正确的行
标签: python pandas dataframe dictionary pandas-groupby