Как заполнить столбцы в кадре данных панд как количество сгруппированных вхождений - PullRequest
0 голосов
/ 04 октября 2019

Предполагая, что у меня есть следующий фрейм данных pandas, где col_1 может принимать только значения 1.0 или 0.0:

+-------+---------+
| score | col_a   | 
+-------+---------+
|   10  |  1.0    |
|   15  |  0.0    |
|   12  |  0.0    |
|   12  |  0.0    |
+-------+---------+

Я хотел бы создать следующий фрейм данных, который по существу группируется по баллам, и этозатем заполняет счет для каждого счета, где col_a = 1.0 или col_a = 0.0

+--------+----------|---------+
| score  |  col_a_1 | col_a_0 |
+--------+----------+---------+
| 10     |    1     |     0   |
| 15     |    0     |     1   |
| 12     |    0     |     2   |
+--------+----------+---------+

Я понимаю, что это группа по операциям, но я не уверен, как заполнить счет в новых столбцах.

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Определить функцию подсчета вхождений 0 и 1 в col_a в текущей группе строк:

def cnt(grp):
    n0 = grp.col_a[grp.col_a == 0].size
    n1 = grp.col_a[grp.col_a == 1].size
    return pd.Series([n1, n0], index=['col_a_1', 'col_a_0'])

Тогдапримените эту функцию:

df.groupby('score', sort=False).apply(cnt).reset_index()

Для ваших данных выборки результат будет:

   score  col_a_1  col_a_0
0     10        1        0
1     15        0        1
2     12        0        2
0 голосов
/ 04 октября 2019

поскольку ваш столбец является двоичным, вы можете просто сделать

col_a_1 = df.groupby('score').sum() col_a_0 = df.groupby('score').count()- col_a_1 pd.concat([col_a_0.add_suffix('_0'), col_a_1.add_suffix('_1')], axis=1)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...