在groupby中使用三元运算符的Python
有没有办法在groupby条件中使用三元运算符?显然,这种语法是无效的在groupby中使用三元运算符的Python,python,python-3.x,pandas,Python,Python 3.x,Pandas,有没有办法在groupby条件中使用三元运算符?显然,这种语法是无效的 d = {'name':['bil','bil','bil','jim'], 'col2': ['acct','law', 'acct2','law'], 'col3': [1,2,3,55], 'col4': [1,1,1,2] } df2 = pd.DataFrame(data=d) df2[['col4']] = df2[['col4']].apply(pd.to_numeri
d = {'name':['bil','bil','bil','jim'],
'col2': ['acct','law', 'acct2','law'],
'col3': [1,2,3,55],
'col4': [1,1,1,2]
}
df2 = pd.DataFrame(data=d)
df2[['col4']] = df2[['col4']].apply(pd.to_numeric)
df2.groupby(['name','col2'])['col4']\
.max() if (.max()>30) else ''
你可以用三元数,但我不会告诉你。相反,这里有一个更好的选择-掩盖结果:
v = df2.groupby(['name','col2'])['col4'].max()
v.where(v.gt(30), '')
在
groupby
中使用lambda
s会大大降低其运行速度。如果您想坚持使用三元组,请执行以下操作:
def condition(row):
return row['col4'].max() if row['col4'].max() > 30 else ''
ds = df2.groupby(['name','col2']).apply(lambda row: condition(row))
您可以将其包装在函数中并使用
。应用
您希望获得的最终结果是什么?现在还不清楚你要把条件应用到什么地方,首先(你是把它应用到col4
还是什么?)太棒了,谢谢你教我新东西!