Доступ к данным после использования groupby () с пандами - PullRequest
0 голосов
/ 17 сентября 2018

Если у меня есть этот вывод:

AnnualReportDate  BoardID  Gender
20150901          2355     F         2
                           M         3
                  8888     F         2
                           M         3
20160901          5655     F         3
                           M         3
                  9999     M         6
dtype: int64

Как я могу рассчитать процент F и M в каждом году и на доске?Вот вывод, который я пытаюсь получить:

20150901    2355    2/5    3/5
20150901    8888    2/5    3/5
20160901    5655    3/6    3/6
20160901    9999    0/6    1/6

Я довольно новичок в пандах.

Ответы [ 3 ]

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

unstack и делится на sum

s1=s.unstack(fill_value=0)
s1.div(s1.sum(1),0)
Out[484]: 
Gender                      F    M
AnnualReportDate BoardID          
20150901         2355     0.4  0.6
                 8888     0.4  0.6
20160901         5655     0.5  0.5
                 9999     0.0  1.0
0 голосов
/ 17 сентября 2018

Если s - это имя вашего Series, вы можете сделать

df = s.unstack()
df.div(df.sum(1), 0)

На практике:

In [217]: s
Out[217]:
AnnualReportDate  BoardID  Gender
20150901          2355     F         2
                           M         3
                  8888     F         2
                           M         3
20160901          5655     F         3
                           M         3
                  9999     M         6
dtype: int64

In [218]: df = s.unstack()

In [219]: df.div(df.sum(1), 0)
Out[219]:
Gender                      F    M
AnnualReportDate BoardID
20150901         2355     0.4  0.6
                 8888     0.4  0.6
20160901         5655     0.5  0.5
                 9999     NaN  1.0
0 голосов
/ 17 сентября 2018

Вот хороший пример, хотя ваша серия рассматривается как кадр данных:

from io import StringIO

df = pd.read_table(StringIO('''
AnnualReportDate  BoardID  Gender    val
20150901          2355     F         2
20150901          2355     M         3
20150901          8888     F         2
20150901          8888      M         3
20160901          5655     F         3
20160901          5655     M         3
20160901          9999     M         6
'''), delim_whitespace=True, index_col=['AnnualReportDate', 'BoardID', 'Gender'])

df.div(df.groupby(['AnnualReportDate','BoardID']).transform('sum')).unstack()

Выход:

                    Gender  F       M
AnnualReportDate    BoardID     
20150901            2355    0.4     0.6
                    8888    0.4     0.6
20160901            5655    0.5     0.5
                    9999    NaN     1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...