Панды DF Grouby определенного совпадения на другой столб - PullRequest
0 голосов
/ 09 февраля 2019

Я хочу объединить столбец pandas df по 2 критериям.

1) Сначала я хочу сгруппировать col1

2) Я хочу получить среднее значение col3, только если в col2 есть как минимум одна строка, совпадающая с 0, и как минимум одна строка, соответствующая 1.

Я попробовал некоторую комбинацию этого, но это, конечно, не работает:

df.groupby(['col1'])['col2'].isin([0 & 1]).col3.mean()

Так, например, если это мой df:

df = pd.DataFrame({
'col1' : ['a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
'col2' : [ 0, 0, 1, 0, 1, 1, 1, 0, 1, 0],
'col3' : [ 3, 4, 2, 4, 1, 2, 3, 5, 2, 1]
})

>>>
    col1    col2    col3
0    a       0        3
1    a       0        4
2    b       1        2
3    b       0        4
4    c       1        1
5    c       1        2
6    c       1        3
7    d       0        5
8    d       1        2
9    d       0        1

То, что я хочу увидеть:

col1    col2    mean(col3)
b        1        2
b        0        4
d        0        3   
d        1        2

1 Ответ

0 голосов
/ 09 февраля 2019

Ваш главный вопрос - это вопрос фильтрации.Есть несколько способов сделать это, но один способ состоит в том, чтобы вычислить число nunique для группы.

u = df[df.groupby('col1').col2.transform('nunique').gt(1)]

  col1  col2  col3
2    b     1     2
3    b     0     4
7    d     0     5
8    d     1     2
9    d     0     1

Если в группе col2 есть 0 и 1 в группе, число nunique будет больше 1.

Теперь звоните groupby как обычно.

u.groupby(['col1', 'col2'], as_index=False).col3.mean()

  col1  col2  col3
0    b     0     4
1    b     1     2
2    d     0     3
3    d     1     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...