Подсчет количества единиц, которые появляются в строке pandas - PullRequest
0 голосов
/ 10 января 2020

У меня есть набор данных, который выглядит следующим образом:

my_dict = {'my_var': {0: u'000000',
  1: u'100000',
  2: u'000000',
  3: u'000000',
  4: u'000000',
  5: u'010000',
  6: u'000100',
  7: u'110100',
  8: u'110101',
  9: u'000000',
  10: u'010000',
  11: u'000100',
  12: u'000100',
  13: u'000100',
  14: u'011101',
  15: u'000000',
  16: u'111110',
  17: u'001010',
  18: u'011111',
  19: u'111111'},
 'id': {0: u'115',
  1: u'143',
  2: u'155',
  3: u'129',
  4: u'003',
  5: u'100',
  6: u'102',
  7: u'004',
  8: u'889',
  9: u'349',
  10: u'772',
  11: u'759',
  12: u'346',
  13: u'340',
  14: u'541',
  15: u'924',
  16: u'234',
  17: u'661',
  18: u'965',
  19: u'779'}}

Я хотел бы подсчитать вхождение единиц для каждого случая, так что конечный результат равен числу 1 на идентификатор. В конечном выводе идентификатор 115 имеет ноль единиц, а идентификатор 143 - единицу.

У меня была идея разбить строку на шесть столбцов, а затем подвести итог, но это звучало очень неэффективно, кроме того, что я не смог ее реализовать.

Помощь всегда ценится.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Как я понимаю id уникален в каждом ряду. Если это правда, вы можете использовать простые str.count:

df['num_1'] = df['my_var'].transform(lambda x: x.count('1'))

print(df)

Отпечатки:

    my_var   id  num_1
0   000000  115      0
1   100000  143      1
2   000000  155      0
3   000000  129      0
4   000000  003      0
5   010000  100      1
6   000100  102      1
7   110100  004      3
8   110101  889      4
9   000000  349      0
10  010000  772      1
11  000100  759      1
12  000100  346      1
13  000100  340      1
14  011101  541      4
15  000000  924      0
16  111110  234      5
17  001010  661      2
18  011111  965      5
19  111111  779      6
1 голос
/ 10 января 2020

Используя DataFrame.assign, Series.str.count и groupby.sum:

df.assign(ones=df['my_var'].str.count('1')).groupby('id', sort=False).sum().reset_index()

     id  ones
0   115     0
1   143     1
2   155     0
3   129     0
4   003     0
5   100     1
6   102     1
7   004     3
8   889     4
9   349     0
10  772     1
11  759     1
12  346     1
13  340     1
14  541     4
15  924     0
16  234     5
17  661     2
18  965     5
19  779     6

Я предположил, что столбец my_var имеет тип string, если нет, замените:

df['my_var'].str.count('1')

С

df['my_var'].astype(str).str.count('1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...