Concat два кадра данных с дублированным индексом в формате DateTime - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь использовать конкат pandas для двух фреймов данных, которые содержат повторяющиеся индексы.

Когда я пытаюсь конкатировать мои два фрейма данных, я получаю следующую ошибку

Форма переданных значений: (12, 180054), индексы подразумевают (12, 10000).

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

df1 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-02",'b':4}],
                   columns = ['a','b']).set_index('a')
df1.index = pd.to_datetime(df1.index)

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

            b
a   
2018-01-01  2
2018-01-01  3
2018-01-02  4

и

df2 = pd.DataFrame([{'a':"2018-01-01",'c':5},{'a':"2018-01-02",'c':6}],columns = ['a','c']).set_index('a')
df2.index = pd.to_datetime(df2.index)

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

            c
a   
2018-01-01  5
2018-01-02  6

Это похоже на мой оригинальный Dataframe.Индексы дублируются и имеют формат даты и времени.

Однако concat (с осью = 1) прекрасно работает, создавая следующий фрейм данных

            b   c
a       
2018-01-01  2   5
2018-01-01  3   5
2018-01-02  4   6

(что я и ожидал)

Однако, если я использую:

df3 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-03",'b':4}],
                   columns = ['a','b']).set_index('a')
df3.index = pd.to_datetime(df3.index)

, который выглядит как:

            b
a   
2018-01-01  2
2018-01-01  3
2018-01-03  4

вместо df1, он возвращает

Shape of passed values is (2, 6), indices imply (2, 4)

Единственная разница междуво-вторых, конечная дата df1 - 2018-01-02, а df3 - 2018-01-03.

Логически (по крайней мере для меня) должно возвращаться следующее:

            b   c
a       
2018-01-01  2   5
2018-01-01  3   5
2018-01-02  Nan 6
2018-01-03  4   Nan

IЯ не понимаю, как он может правильно выполнять одно, но не другое, поскольку, если он не может обработать дублирующиеся индексы, он должен одинаково сработать на обоих.

Pandas concat: ValueError: Форма переданных значенийэто бла, индексы подразумевают, что бла2 - это в основном тот же вопрос, однако все респонденты говорят, что проблема заключается в дублировании индексов, однако это не может быть единственной причиной, поскольку concat действительно работает с дублированными индексами.

Iхотел бы привести в действиесоюзник понимает, что идет не так, и как обойти проблему.

Большое спасибо

1 Ответ

0 голосов
/ 19 декабря 2018

Вам необходимо выполнить внешнее соединение: df3.join(df2, how='outer')

             b    c
a                   
2018-01-01  2.0  5.0
2018-01-01  3.0  5.0
2018-01-02  NaN  6.0
2018-01-03  4.0  NaN
...