【发布时间】:2020-06-20 01:12:08
【问题描述】:
我想编写一个函数来计算按数据帧分组的列的模式。如果一个组的值没有众数,第一个例外:计算中位数,如果该组的值都是空值,第二个例外:什么都不做。 示例数据框如下所示:
dataframe = pd.DataFrame({'b':['b1','b1','b1','b1','b1','b1','b2','b2','b2','b2','b2','b2','b3','b3','b3'],'d':[0.1,None,0.12,None,None,0.13,1,2,1,1,None,None,None,None,None]})
功能如下:
def fill_mode(group):
try:
group['mode'] = mode(group['d'])
except:
not_nulls = group[~group['d'].isnull()]
group['mode'] = median(not_nulls['d'])
except:
pass
return group
apply函数如下:
dataframe = dataframe.groupby('b').apply(fill_mode)
这会引发此错误:
SyntaxError: default 'except:' must be last
最终的输出应该是这样的:
【问题讨论】:
-
“第二个例外”是什么意思?
-
你的意思是如果计算中位数时出现异常?您应该在第一个
except块内有第二个try/except。 -
@Barmar 你的意思是如果你在计算中位数时遇到异常?正是
标签: python median mode try-except