Панды присоединяются (объединяются?) К информационным кадрам, сохраняют только уникальные признаки - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть фрейм данных с индексом даты.Есть несколько дат, которые так или иначе пропали без вести.Это я назову датафреймом A.У меня есть еще один фрейм данных с указанием указанных дат.Я назову этот фрейм данных B.

Я хотел бы объединить два фрейма данных:

Сохранить все индексы A и соединить его с B, но Я не хочу, чтобы какие-либо строки вB с общим индексом A.То есть я хочу, чтобы только строки, отсутствующие в A, возвращались из B.

Как это легче всего сделать?

Примечание:

Такое поведение верно для базы данных, которую я имею.Я буду делать это примерно 400 раз.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Я считаю, что вам нужно Index.difference:

B.loc[B.index.difference(A.index)]

РЕДАКТИРОВАТЬ:

A = pd.DataFrame({'A':range(10)}, index=pd.date_range('2019-02-01', periods=10))
B = pd.DataFrame({'A':range(10, 20)}, index=pd.date_range('2019-01-27', periods=10))

df = pd.concat([A, B.loc[B.index.difference(A.index)]]).sort_index()
print (df)
             A
2019-01-27  10
2019-01-28  11
2019-01-29  12
2019-01-30  13
2019-01-31  14
2019-02-01   0
2019-02-02   1
2019-02-03   2
2019-02-04   3
2019-02-05   4
2019-02-06   5
2019-02-07   6
2019-02-08   7
2019-02-09   8
2019-02-10   9

df1= pd.concat([A, B])
df1 = df1[~df1.index.duplicated()].sort_index()
print (df1)
             A
2019-01-27  10
2019-01-28  11
2019-01-29  12
2019-01-30  13
2019-01-31  14
2019-02-01   0
2019-02-02   1
2019-02-03   2
2019-02-04   3
2019-02-05   4
2019-02-06   5
2019-02-07   6
2019-02-08   7
2019-02-09   8
2019-02-10   9
0 голосов
/ 24 февраля 2019

Хотя уже есть хороший ответ, я хочу поделиться этим, потому что он такой короткий

pd.concat([A, B]).drop_duplicates(keep='first')
0 голосов
/ 24 февраля 2019

Если я правильно читаю вопрос, вам нужно:

B[~B.index.isin(A.index)]

Например:

In [192]: A
Out[192]:
Empty DataFrame
Columns: []
Index: [1, 2, 4, 5]

In [193]: B
Out[193]:
Empty DataFrame
Columns: []
Index: [1, 2, 3, 4, 5]

In [194]: B[~B.index.isin(A.index)]
Out[194]:
Empty DataFrame
Columns: []
Index: [3]

Использовать данные из A, когда они есть, ив противном случае возьмите его из B, затем вы можете сделать

pd.concat([A, B[~B.index.isin(A.index)]).sort_index()

или, предположив, что A не содержит нулевых элементов, которые вы хотите сохранить, вы можете выбрать другой подход и пойти на что-то вроде

pd.DataFrame(A, index=B.index).fillna(B)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...