Панды медианы графа группы - PullRequest
0 голосов
/ 26 апреля 2018
g  | val
1     a
1     ''
2     b
2     ''
2     c
3    ''

У меня есть df.groupby ('g'), и я хочу выбрать медиану числа непустых значений в каждой группе. Как это сделать в пандах?

Ответы [ 4 ]

0 голосов
/ 26 апреля 2018

Пустые строки оцениваются как False в логическом контексте. И False оценивается как 0 в целочисленном контексте. Мы можем использовать это, чтобы сделать

df.val.astype(bool).groupby(df.g).sum().median()

1.0
0 голосов
/ 26 апреля 2018

Другой способ - использование функции apply:

# inside apply, we can filter values
df.groupby('g')['val'].apply(lambda x: x[x!= ''].count()).median()
Out[2]: 1.0
0 голосов
/ 26 апреля 2018

Вы можете просто нарезать свой кадр, исключая пустые значения в столбце val, затем использовать groupby и посчитать медиану.

df[df['val']!=''].groupby('g').val.count().median()
0 голосов
/ 26 апреля 2018

Это то, что вам нужно? (Count не будет считать 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

Фильтр перед групповым

df[df.val.isin(['','somethingealse'])].groupby('g').val.count().median()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...