Как объединить MultiIndex Dataframes с весами в Python Pandas? - PullRequest
0 голосов
/ 14 апреля 2019

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

     Dataframe1:

     Date      IDs     Values
     Date1     ID4     0.5
               ID5     2.3
               ID6     3.1
     Date2     ID1     1.2
               ID4     5.1
     ...


     Dataframe2:

     Date      IDs     Values
     Date1     ID1     2.5
               ID2     3.3
               ID4     4.1
     Date2     ID3     5.2
               ID4     1.1
     ...

same for dataframe3

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

Мне нужно объединить все 3 в один фрейм данных, который имеет одинаковую структуру, но с каждой парой совпадения идентификатора / даты, добавленной с весами (таким образом, средневзвешенным значением).

Существует ли простая команда фрейма данных длявыполнить это?

1 Ответ

1 голос
/ 14 апреля 2019

Если я правильно вас понимаю, мы можем сделать следующее.

Сначала объедините кадры данных в один кадр данных с помощью pandas.concatenate, и в то же время мы сбросим индекс с помощью DataFrame.reset_index.

Затем мы используем Dataframe.groupby в столбцах Date & IDs и принимаем mean из Values:

df_all = pd.concat([df1.reset_index(), df2.reset_index()])

df_all = df_all.groupby(['Date', 'IDs'], as_index=False)['Values'].mean()

Что дает:

print(df_all)
    Date  IDs  Values
0  Date1  ID1     2.5
1  Date1  ID2     3.3
2  Date1  ID4     2.3
3  Date1  ID5     2.3
4  Date1  ID6     3.1
5  Date2  ID1     1.2
6  Date2  ID3     5.2
7  Date2  ID4     3.1
...