подсчитывает все строковые значения в заданном столбце таблицы и группирует его по третьему столбцу - PullRequest
0 голосов
/ 16 октября 2018

У меня есть три столбца.таблица выглядит следующим образом:

ID.   names     tag
1.     john.     1
2.     sam       0
3.    sam,robin. 1
4.     robin.    1

Id: тип целое число Имена: строка типа Tag: тип целое число (всего 0,1)

Я хочу найти, сколько раз каждое имяповторяется сгруппированы по 0 и 1. это должно быть сделано в python.

Ответ должен выглядеть следующим образом:

               0                 1
John           23                12
Robin          32                10
sam            9                 30

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Использование extractall и crosstab:

s = df.names.str.extractall(r'(\w+)').reset_index(1, drop=True).join(df.tag)

pd.crosstab(s[0], s['tag'])

tag    0  1
0
john   0  1
robin  0  2
sam    1  1
0 голосов
/ 16 октября 2018

Из-за природы вашего столбца names требуется некоторая повторная обработка, которую необходимо выполнить, прежде чем вы сможете получить значения счетчиков.В случае вашего примера dataframe это может выглядеть примерно так:

my_counts = (df.set_index(['ID.', 'tag'])
             # Get rid of periods and split on commas
             .names.str.strip('.').str.split(',')
             .apply(pd.Series)
             .stack()
             .reset_index([0, 1])
             # rename column 0 for consistency, easier reading
             .rename(columns={0: 'names'})
             # Get value counts of names per tag:
             .groupby('tag')['names']
             .value_counts()
             .unstack('tag', fill_value=0))

>>> my_counts
tag    0  1
names      
john   0  1
robin  0  2
sam    1  1
...