在groupby中使用三元运算符的Python

时间:2018-03-06 18:29:32

标签: 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_numeric)
df2.groupby(['name','col2'])['col4']\
    .max() if (.max()>30) else ''

2 个答案:

答案 0 :(得分:3)

可以使用三元组,但我不打算告诉你。相反,这是一个更好的选择 - 掩盖结果:

v = df2.groupby(['name','col2'])['col4'].max()
v.where(v.gt(30), '')

lambda内使用groupby会大大减慢其操作速度。

答案 1 :(得分:0)

如果你想坚持使用三元,下面会这样做:

def condition(row):
    return row['col4'].max() if row['col4'].max() > 30 else ''

ds = df2.groupby(['name','col2']).apply(lambda row: condition(row))
相关问题