![](/img/trans.png)
[英]Which Function can I use in Pandas dataframe in order to have this transformation?
[英]how to use lambda function with transformation in pandas dataframe
我使用以下 dataframe
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]
})
我需要为每个项目中的每个 class 对这个 dataframe 应用规则。
我已经编写了 lambda 函数,但不能与 transform 一起使用
regle1 = lambda x: True if x['last_PO_code'].all() == "103" else False
regle2 = lambda x: x.loc[x['last_PO_code'].eq('103'), 'qty'].sum() \
> x.loc[x['last_PO_code'].eq('104'), 'qty'].sum()
regle3 = lambda x: x.loc[x['last_PO_code'].eq('105'), 'qty'].sum() \
== x.loc[x['last_PO_code'].eq('106'), 'qty'].sum()
df['regle1'] = df['class'].map(df.groupby(['class','item']).apply(regle1))
df['regle2'] = df['class'].map(df.groupby(['class','item']).apply(regle2))
df['regle3'] = df['class'].map(df.groupby(['class','item']).apply(regle3))
mask1 = df['regle2'] == True
mask2 = df['regle3'] == True
mask = mask1 & mask2
df['regle3'] = np.where(mask,True,False)
我想将其转换为 function 如下所示使用转换而不适用
我成功使用了规则 1,但我无法使用其他规则
def regle1(x):
return (x == '103').all()
df['regle1'] = df.groupby(['class', 'item']).last_PO_code.transform(regle1)
你的意思是这样的:
regle1 = lambda x: True if x['last_PO_code'].eq('103').all() else False
regle2 = lambda x: True if x['last_PO_code'].eq('103').any() \
and x['last_PO_code'].eq('103').any() \
and x['last_PO_code'].eq('103').sum() > x['last_PO_code'].eq('104').sum() \
else False
regle3 = lambda x: True if x['last_PO_code'].eq('103').any() \
and x['last_PO_code'].eq('104').any() \
and x['last_PO_code'].eq('105').any() \
and x['last_PO_code'].eq('106').any() \
and x['last_PO_code'].eq('103').sum() == x['last_PO_code'].eq('104').sum() \
and x['last_PO_code'].eq('105').sum() == x['last_PO_code'].eq('106').sum() \
else False
然后将它们应用于每个组:
df.groupby(['class','item']).apply(lambda x: pd.Series({'regle1' : regle1(x),
'regle2': regle2(x),
'regle3' : regle3(x)}))
为了
df = pd.DataFrame({'class': 'a a aa aa b b c c c c'.split(),
'item': [5,5,7,7,7,6,9,9,9,9],
'last_PO_code': ['103','103','103','104','103','104','103','104','105','106'],
'qty': [5,4,7,6,7,6,1,1,2,2]
})
它似乎工作正常:
regle1 regle2 regle3
class item
a 5 True False False
aa 7 False True False
b 6 False False False
7 True False False
c 9 False False True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.