Pandas Groupby использует информацию из другого информационного блока - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть два следующих кадра данных:

Таблица 1:

Key1 Key2 Value1  Other Data

1     2     5      foo
3     1     6      bar

и

Таблица 2:

Key1 Key2 Property1 Property2

1     2     5       7     
3     1     6       8      
1     3     7       7      
2     1     4       4      
2     1     6       6     
2     1     8       5

В таблице 1порядок ключей не имеет значения.Таблица 1 не имеет дубликатов.В таблице 2 порядок ключей имеет значение.Таблица 2 имеет дубликаты.Я довольно новичок в пандах, но, как я понимаю, концепция групповой игры должна стать идеальным инструментом для работы.Я надеюсь, что я достаточно хорошо объяснил свою проблему.

Редактировать: Что касается комментариев, я хотел бы разделить проблему.

Первый шаг: объединить таблицу 1 и таблицу 2. Я думаю, что это должнобыть иерархическим.

Key 1 Key 2 Value 1 Other Data Key1 Key2 Property1 Propterty2
 1       2     5        foo       1   2     5           7   
                                  2   1     4           4
                                  2   1     6           6
                                  2   1     8           5
 3       1     6        bar       3   1     6           8
                                  1   3     7           7

Шаг 2: Фильтровать значения на основе значения 1. Если Свойство 1 = Значение 1 + - 1 , удерживайте запись, если не удалите ее.В приведенном здесь примере это приводит к:

Key 1 Key 2 Value 1 Other Data Key1 Key2 Property1 Propterty2
 1       2     5        foo       1   2     5           7   
                                  2   1     4           4
                                  2   1     6           6
 3       1     6        bar       3   1     6           8
                                  1   3     7           7

Шаг 3: изменить форму и построить среднее значение: построить среднее значение для всех оставшихся пар (здесь среднее значение для двух записей для (2,1)).Затем измените форму кадра данных.

Key 1 Key 2 Value 1 Other Data  Property1(i,j) Propterty2(i,j)  Property1(j,i)  Propterty2(j,i) 
 1       2     5        foo         5               7                5           5
 3       1     6        bar         6               8                7           7

Шаг 4: Обработка пропущенных данных.Если бы у меня были только данные для (1,3) в Таблице 2, но нет для (3,1), тогда он должен заполнить эти значения NaN в Шаге 3.На последнем шаге я хотел бы удалить все строки с NaN.

1 Ответ

0 голосов
/ 19 сентября 2019

Попробуйте объединить дважды:

new_df = df2.groupby(['Key1','Key2'], as_index=False).mean()

(df1.merge(new_df, 
          left_on=['Key1','Key2'],
          right_on=['Key2','Key1'],
          suffixes=('', '_add'))
    .drop(['Key1_add','Key2_add'], axis=1)
    .merge(new_df, on=['Key1','Key2'],
           suffixes=['(i,j)','(j,i)'] )
)

вывод:

   Key1  Key2  Value1 OtherData  Property1(i,j)  Property2(i,j)  \
0     1     2       5       foo             5.5             5.0   
1     3     1       6       bar             7.0             7.0   

   Property1(j,i)  Property2(j,i)  
0             5.0             7.0  
1             6.0             8.0  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...