#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
ха-ха.