pandas - подсчет вхождений значения в DataFrame для каждого уникального значения в другом столбце - PullRequest
0 голосов
/ 20 сентября 2018

Предположим, что у меня есть DataFrame в соответствии с:

    term      score
0   this          0
1   that          1
2   the other     3
3   something     2
4   anything      1
5   the other     2
6   that          2
7   this          0
8   something     1

Как бы я посчитал количество экземпляров в столбце score по уникальным значениям в столбце term?Получение результата, подобного следующему:

    term      score 0     score 1     score 2     score 3
0   this            2           0           0           0
1   that            0           1           1           0
2   the other       0           0           1           1
3   something       0           1           1           0
4   anything        0           1           0           0

Связанные с этим вопросы, которые я читал здесь, включают Подсчет Python Pandas и суммирование определенных условий и COUNTIF в пандах Python для нескольких столбцов с несколькими условиями , но ни то, ни другое, похоже, не совсем то, что я хочу сделать.pivot_table как упоминалось на этот вопрос кажется, что он может быть актуальным, но мне мешает недостаток опыта и краткость документации панд.Спасибо за любые предложения.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы также можете использовать get_dummies, set_index и sum с параметром level:

(pd.get_dummies(df.set_index('term'), columns=['score'], prefix_sep=' ')
   .sum(level=0)
   .reset_index())

Выход:

        term  score 0  score 1  score 2  score 3
0       this        2        0        0        0
1       that        0        1        1        0
2  the other        0        0        1        1
3  something        0        1        1        0
4   anything        0        1        0        0
0 голосов
/ 20 сентября 2018

Используйте groupby с size и измените на unstack, последний add_prefix:

df = df.groupby(['term','score']).size().unstack(fill_value=0).add_prefix('score ')

Или используйте crosstab:

df = pd.crosstab(df['term'],df['score']).add_prefix('score ')

Или pivot_table:

df = (df.pivot_table(index='term',columns='score', aggfunc='size', fill_value=0)
        .add_prefix('score '))

print (df)
score      score 0  score 1  score 2  score 3
term                                         
anything         0        1        0        0
something        0        1        1        0
that             0        1        1        0
the other        0        0        1        1
this             2        0        0        0
...