g | val
1 a
1 ''
2 b
2 ''
2 c
3 ''
我有一个df.groupby('g'),我想选择每组中非空val计数的中位数。如何在熊猫中做到这一点?
答案 0 :(得分:6)
这是你需要的吗? (计数不会计入NaN
,这就是为什么我们将''替换为np.nan
)
df.val=df.val.replace('',np.nan)
df
Out[243]:
g val
0 1 a
1 1 NaN
2 2 b
3 2 NaN
4 2 c
5 3 NaN
df.groupby('g').val.count().median()
Out[245]: 1.0
在groupby之前过滤
df[df.val.isin(['','somethingealse'])].groupby('g').val.count().median()
答案 1 :(得分:1)
另一种方法是使用apply
函数:
# inside apply, we can filter values
df.groupby('g')['val'].apply(lambda x: x[x!= ''].count()).median()
Out[2]: 1.0
答案 2 :(得分:1)
你可以只对{@ 1}}列中的空值进行切片,然后使用val
计算中位数。
groupby
答案 3 :(得分:0)
空字符串在布尔上下文中计算为False
。并且False
在整数上下文中求值为0
。我们可以用它来做
df.val.astype(bool).groupby(df.g).sum().median()
1.0