Сортировать по имени и присоединиться к Dataframe - PullRequest
0 голосов
/ 09 апреля 2020

Я получил некоторую базу данных, а затем преобразовал ее в pandas DataFrame следующим образом

        food_weight = pd.DataFrame(L, columns=['Week day', 'Date', 'Time','Type',
                                     'Favourites', 'Weight'])

позволяет напечатать его:

    Week day  Date        Time   Type      Favourites        Weight
0   Thursday  04-09-2020  14:55  lunch      dish1            200
1   Thursday  04-09-2020  15:17  snack      dish2            100
2   Thursday  04-09-2020  15:17  snack      dish3            130
3   Thursday  04-09-2020  19:17  dinner     dish4            115
4   Monday    04-06-2020  17:41  snack           ----etc-----                       
5   Monday    04-06-2020  17:46  breakfast                            
6   Monday    04-06-2020  17:46  lunch                        
7   Monday    04-06-2020  17:46  snack                                       
8   Tuesday   04-07-2020  17:57  snack                       
9   Tuesday   04-07-2020  17:57  snack                                       
10  Wednesday 04-08-2020  17:57  snack                                 
11  Friday    04-10-2020  17:57  snack                                   
12  Saturday  04-11-2020  17:57  snack  
13  Sunday    04-12-2020  17:57  snack                              
14  Saturday  11-04-2020  18:06  snack                
15  Saturday  11-04-2020  18:06  lunch       

я пытался использовать food_weight.groupby(['Week day','Date','Type','Time'])['Favourites'].apply(lambda tags: ','.join(tags)) и получил это:

    Week day  Date        Type   Time         Favourites
0   Thursday  04-09-2020  lunch  14:55        dish1 
                          snach  15:17        dish2,dish3
                          dinner 19:17        dish4

но мне нужно получить что-то вроде этого: (

    Week day  Date        Type   Time         Favourites       Weight
0   Thursday  04-09-2020  lunch  14:55        dish1            200
                          snach  15:17        dish2,dish3      100,130
                          dinner 19:17        dish4            115                            
                                                 ----etc-----                                      

База данных на GitHub

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Вы можете использовать pandas.pivot_table:

# prerequisite, since you can only join strings

food_weight[['Favourites', 'Weight']]=food_weight[['Favourites', 'Weight']].astype(str)

res=food_weight.pivot_table(index=['Week day','Date','Type','Time'], values=['Favourites', 'Weight'], aggfunc=', '.join)

Выходы:

>>> res
                                    Favourites    Weight
Week day Date       Type   Time
Thursday 04-09-2020 dinner 19:17         dish4       115
                    lunch  14:55         dish1       200
                    snack  15:17  dish2, dish3  100, 130

Ref. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

0 голосов
/ 09 апреля 2020

IIU C:

food_weight.groupby(['Week day','Date','Type','Time']).agg({"Favourites": lambda tags: ','.join(tags),
                    "Weight": lambda tags: ','.join(tags)})
...