g | val
1 a
1 ''
2 b
2 ''
2 c
3 ''
我有一个df.groupby('g'(,我想选择每个组中非空val的计数中位数。如何在熊猫中做到这一点?
这是您需要的吗?(计数不会计算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()
另一种方法是使用apply
函数:
# inside apply, we can filter values
df.groupby('g')['val'].apply(lambda x: x[x!= ''].count()).median()
Out[2]: 1.0
您可以将框架切成框架,不包括val
列中的空值,然后使用groupby
并计数中位数。
df[df['val']!=''].groupby('g').val.count().median()
在布尔上下文中对False
评估的空字符串。和False
在整数上下文中评估0
。我们可以用它做
df.val.astype(bool).groupby(df.g).sum().median()
1.0