Автоматическое объединение большого количества кадров данных

#python #pandas #dataframe

Вопрос:

У меня был большой фрейм данных, который выглядит так:

 df= team workplace job employee a w1 j1 x a w1 j1 y a w1 j2 z b w1 j1 x b w1 j3 t c w2 j4 s c w2 j5 u  

Я разделил его на несколько фреймов данных на основе team :

 grouper = [g[1] for g in df.groupby(['team'])  

У меня также есть второй фрейм данных, который выглядит так:

 df2= employee workplace feedback question x w1 True q1 x w1 False q2 x w1 True q2 y w1 True q1 y w1 False q4 z w1 False q1 z w1 False q2 z w1 True q2 t w1 False q3 s w2 True q6 s w2 False q6 u w2 True q6 u w2 False q7  

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

 grouper0_feedbacks = grouper[0].merge(df2, on=['employee', 'workplace'])   

Но как я могу сделать это для всех них, не написав это вручную, когда в них так много grouper кадров данных ?

Комментарии:

1. Как насчет слияния во-первых, группировки во-вторых ?

Ответ №1:

Изменить порядок операций следует здесь — сначала merge , затем разделить:

 df1 = df.merge(df2, on=['employee', 'workplace'])   grouper0_feedbacks = [g for _, g in df1.groupby(['team'])]  

Если это действительно нужно, используйте понимание списка для цикла:

 grouper = [g for _, g in df.groupby(['team'])] grouper0_feedbacks = [g.merge(df2, on=['employee', 'workplace']) for g in grouper]  

Комментарии:

1. Спасибо! У меня есть только один тривиальный вопрос, в котором я не уверен: когда я разделил его первым (как в моем посте, но в огромном наборе данных), длина группы была равна количеству команд, которые у меня есть. Когда я сначала объединяю его, а затем разделяю, длина групера становится намного меньше. Это означает , что для некоторых команд employee s не были найдены df2 , верно? Я всегда боюсь потерять данные, когда использую df.merge ха-ха.