Объедините несколько фреймов данных Pandas с дублирующимися индексными парами дата-время - PullRequest
0 голосов
/ 26 июня 2018

У меня есть три кадра данных Pandas, проиндексированных по дате и времени: df1, df2 и df3.У каждого есть пары дат в индексе.Я хотел бы объединить эти три кадра данных вместе, сохранив любые пары индексов даты и времени, которые являются уникальными, но объединяя любые повторяющиеся пары, чтобы эти пары дат не были перечислены несколько раз (не простой конкат).Вот примеры фреймов данных:

In [1]: print df1
            CurTempMid      id
fldDate                       
1997-12-23         0.0  recent
1997-12-23        -2.0    hist
1997-12-27         9.0  recent
1997-12-27         7.0    hist     
1998-02-10         9.0  recent
1998-02-10         7.0    hist
...                ...     ... 
2001-01-04        27.0  recent
2001-01-04        26.0    hist
2001-03-16        12.0  recent
2001-03-16        11.0    hist
2001-04-06        23.0  recent
2001-04-06        22.0    hist

In [2]: print df2
            MaxTempMid      id
fldDate                       
1998-01-02        29.0  recent
1998-01-02        28.0    hist
1998-02-15        18.0  recent
1998-02-15        23.0    hist
1998-02-23        24.0  recent
1998-02-23        15.0    hist
...                ...     ... 
2001-01-01        16.0  recent
2001-01-01        22.0    hist
2001-01-04        30.0  recent
2001-01-04        37.0    hist
2001-02-16        14.0  recent
2001-02-16        11.0    hist

In [3]: print df3
            MinTempMid      id
fldDate                       
1997-12-23         0.0  recent
1997-12-23        -2.0    hist
1997-12-26        -3.0  recent
1997-12-26        -2.0    hist
1997-12-27        -1.0  recent
1997-12-27         0.0    hist
...                ...     ...
2001-02-18         9.0  recent
2001-02-18        36.0    hist
2001-03-11        18.0  recent
2001-03-11        38.0    hist
2001-03-12        13.0  recent
2001-03-12        16.0    hist

Требуемый результат выглядит следующим образом:

            CurTempMid MaxTempMid MinTempMid       id    
fldDate                       
1997-12-23         0.0        Nan        0.0   recent
1997-12-23        -2.0        NaN       -2.0     hist
1997-12-26         Nan        NaN       -3.0   recent
1997-12-26         NaN        NaN       -2.0     hist
1997-12-27         9.0        NaN       -1.0   recent
1997-12-27         7.0        NaN        0.0     hist 
...                ...        ...        ...      ...

После объединения столбец 'id' должен быть идентичен, поэтому мне нужно только сохранитьодин столбец 'id'.

1 Ответ

0 голосов
/ 26 июня 2018

Если вы уверены, что столбец id одинаков для разных временных рядов, тогда это решение должно работать для вас.Вы можете объединить три кадра данных в их столбцах fldDate и id, а затем установить индекс обратно на fldDate.

m = (df1.reset_index()
        .merge(df2.reset_index(), on=['fldDate', 'id'], how='outer')
        .merge(df3.reset_index(), on=['fldDate', 'id'], how='outer')
        .sort_values('fldDate'))
m.set_index('fldDate', inplace=True)
print(m.head())
#             CurTempMid      id  MaxTempMid  MinTempMid
# fldDate
# 1997-12-23         0.0  recent         NaN         0.0
# 1997-12-23        -2.0    hist         NaN        -2.0
# 1997-12-26         NaN    hist         NaN        -2.0
# 1997-12-26         NaN  recent         NaN        -3.0
# 1997-12-27         9.0  recent         NaN        -1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...