Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在groupby中使用三元运算符的Python_Python_Python 3.x_Pandas - Fatal编程技术网

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

在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

有没有办法在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 ''
你可以用三元数,但我不会告诉你。相反,这里有一个更好的选择-掩盖结果:

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
还是什么?)太棒了,谢谢你教我新东西!