Подсчитать уникальное количество экземпляров в кадре данных по указанному индексу - PullRequest
0 голосов
/ 31 мая 2018

У меня есть фрейм данных, sega_df:

    Character  Month    Code
    Sonic      18-Jan   P008924
    Shadow     18-Jan   P007869
    Sonic      18-Feb   P007811
    Sonic      18-Feb   P008639
    Sonic      18-Mar   P008242
    Sonic      18-Mar   P007823
    Sonic      18-Mar   P007823
    Sonic      18-Mar   P008380
    Sonic      18-Apr   P008637
    Shadow     18-Apr   P008266

В моем желаемом выводе я хотел бы посчитать количество уникальных кодов в месяц на символ.Что означает, например, для Sonic за март месяц, я хотел бы видеть всего 3, а не 4 (игнорируя, как P007823 встречается дважды, и для него есть три кода на март месяц).Мой желаемый результат:

                       Jan 18  Feb 18  Mar 18  Apr 18
Character                                     
Sonic                  1.0     2.0     3.0    1.0
Shadow                 1.0     0.0     0.0    1.0

Я попытался .count() и .unstack() и подумал об использовании .sum() в конце.Мой код до сих пор:

sega_pivot = sega_df.groupby(['Character','Month']).count().unstack()

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Раствор от crosstab

df=df.drop_duplicates(['Character','Code'])
pd.crosstab(df.Character,df.Month)
Out[166]: 
Month      18-Apr  18-Feb  18-Jan  18-Mar
Character                                
Shadow          1       0       1       0
Sonic           1       2       1       3
0 голосов
/ 31 мая 2018

Опция 1
drop_duplicates, затем используйте ваш метод:

df = df.drop_duplicates('Code').groupby(['Character', 'Month']).count().unstack().fillna(0)
df.columns = df.columns.droplevel()

Month      18-Apr  18-Feb  18-Jan  18-Mar
Character
Shadow        1.0     0.0     1.0     0.0
Sonic         1.0     2.0     1.0     3.0

Опция2
pivot_table с aggfunc и unique

df.pivot_table(index='Character', columns='Month', values='Code', aggfunc=lambda x: len(x.unique()))

Month      18-Apr  18-Feb  18-Jan  18-Mar
Character
Shadow        1.0     0.0     1.0     0.0
Sonic         1.0     2.0     1.0     3.0
...