熊猫的集体比人数中位数


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

最新更新