我的数据帧=
df = pd.DataFrame({'class': 'a a b b b c c c'.split(),
'code': ['103','104','103','103','104','104','104','103'],
'qty': [4,4,5,6,11,8,9,0]})
对于每个类,我想要是否存在代码103和104,并且如果与代码103相关联的数量>到代码104的数量。
我已经为问题的第一部分开发了一个不起作用的函数,但我不知道如何进行第二个
def regle_2(df):
if (df['code'].any() == '103') & (df['code'].any() == '104'):
df['bool'] = True
else:
df['bool'] = False
return df
我像这个一样使用它
g = df.groupby('class').apply(regle_2)
这就是的结果
A code qty bool
0 a 103 4 False
1 a 104 4 False
2 b 103 5 False
3 b 103 6 False
4 b 104 11 False
5 c 104 8 False
6 c 104 9 False
7 c 103 0 False
提前感谢您的建议
尝试:
regle2 = lambda x: x.loc[x['code'].eq('103'), 'qty'].max()
> x.loc[x['code'].eq('104'), 'qty'].min()
df['bool'] = df['class'].map(df.groupby('class').apply(regle2))
print(df)
# Output:
class code qty bool
0 a 103 4 False
1 a 104 4 False
2 b 103 5 False
3 b 103 6 False
4 b 104 11 False
5 c 104 8 False
6 c 104 9 False
7 c 103 0 False
注意:您不需要检查类103或104是否存在,因为当您在空数据帧上使用max
或min
时,返回值为nan
。