Панды: создание DF с настраиваемыми столбцами на основе разных DF - PullRequest
0 голосов
/ 08 июня 2018

У меня есть два фрейма данных, и мне нужно либо изменить второй, чтобы он соответствовал формату моего первого, либо я могу создать новый фрейм данных полностью.

Первый кадр данных - это просто ...

stores_df = pd.DataFrame({'Stores': ['Kroger', 'United'], 'City':['Dallas','Austin']})

    Stores  City
0   Kroger  Dallas
1   United  Austin

Второй форматируется примерно так (вот как это дается мне, я не могу его изменить) ...

apples_df = pd.DataFrame({'Color': ['Red', 'Green', 'Yellow','Red', 'Green', 'Yellow'], 'Store':['Kroger','Kroger','Kroger','United','United','United'], 'Ripe': ['20','17', '14', '23', '18', '0']})

    Color   Stores  Ripe
0   Red     Kroger  20
1   Green   Kroger  17
2   Yellow  Kroger  14
3   Red     United  23
4   Green   United  18
5   Yellow  United  0

Мой желаемый фрейм данных - это комбинация обоих, за исключением значения цвета + заголовка столбца. «Ripe» становится заголовком столбца назначения, а счетчик добавляется к каждой строке хранения первого фрейма данных.Вот так ...

    Stores  City    Red Ripe    Green Ripe    Yellow Ripe
0   Kroger  Dallas  20          17            14
1   United  Austin  23          18            0

Я немного знаком со слияниями / объединениями и достаточно разбираюсь с сводными таблицами, чтобы понять, что мне нужна помощь.Спасибо.

Ответы [ 2 ]

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

pivot_table + merge

Пара шагов: pivot apples_df и затем слияние с stores_df.

apples_pvt = apples_df.pivot_table(index='Store', columns='Color',
                                   values='Ripe', aggfunc='sum')

res = stores_df.merge(apples_pvt.add_suffix(' Ripe'), left_on='Stores', right_index=True)

print(res)

   Stores    City Green Ripe Red Ripe Yellow Ripe
0  Kroger  Dallas         17       20          14
1  United  Austin         18       23           0
0 голосов
/ 08 июня 2018

IIUC, merge два df, от длинного до широкого, изменяются на unstack

stores_df.merge(apples_df,left_on='Stores',right_on='Store').\ 
   set_index(['Stores','City','Color'])['Ripe'].\
        unstack().\
         add_suffix(' Ripe').\
           reset_index()
Out[194]: 
Color  Stores    City Green Ripe Red Ripe Yellow Ripe
0      Kroger  Dallas         17       20          14
1      United  Austin         18       23           0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...