大熊猫的计数中位数

时间:2018-04-26 14:36:11

标签: python pandas

g  | val
1     a
1     ''
2     b
2     ''
2     c
3    ''

我有一个df.groupby('g'),我想选择每组中非空val计数的中位数。如何在熊猫中做到这一点?

4 个答案:

答案 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