группы панд, используя значения словаря, применяя сумму - PullRequest
0 голосов
/ 11 июня 2018

У меня есть defaultdict:

dd = defaultdict(list,
        {'Tech': ['AAPL','GOOGL'],
         'Disc': ['AMZN', 'NKE']  }

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

         AAPL AMZN GOOGL NKE
1/1/10   100  200  500   200
1/2/10   100  200  500   200
1/310    100  200  500   200

, и я хотел бы получить SUM для фрейма данных на основе значенийсловаря, с ключами в качестве столбцов:

         TECH DISC 
1/1/10   600  400 
1/2/10   600  400  
1/3/10   600  400 

Документация Pandas Groupby говорит, что это происходит, если вы передаете словарь, но все, что я в итоге получаю, это пустой df, использующий этот код:

df.groupby(by=dd).sum()   ##returns empty df

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

вы можете создать новый фрейм данных, используя defaultdict и словарь в 1 строке

pd.DataFrame({x: df[dd[x]].sum(axis=1) for x in dd})
# output:

        Disc  Tech
1/1/10   400   600
1/2/10   400   600
1/310    400   600
0 голосов
/ 11 июня 2018

Создать dict правильно, вы можете использовать by с axis=1

# map each company to industry
dd_rev = {w: k for k, v in dd.items() for w in v}
# {'AAPL': 'Tech', 'GOOGL': 'Tech', 'AMZN': 'Disc', 'NKE': 'Disc'}

# group along columns
df.groupby(by=dd_rev,axis=1).sum() 

Out[160]: 
        Disc  Tech
1/1/10   400   600
1/2/10   400   600
1/310    400   600
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...