Конкатенация данных Pandas предпочтительно - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть 2 аналогичных кадра данных (df1 & df2), имеющих столбцы id, date, count.

Я хочу объединить эти 2 df таким образом, чтобы, если {id,date} перекрывается, я хочу отдать предпочтение строке из df2.

например: df1 имеет запись: id1, 2018/02/03, 45

df2 имеет запись: id1, 2018/02/03, 65

Когда я объединяю / concat, мне нужна только запись из df2, т. Е. {id1, 2018/02/03, 65}.

Помимо этой дублирующей логики разрешения, мне нужны все остальные строки из обоих df как есть.Как я могу добиться этого в Python?

Ответы [ 3 ]

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

Используя метод set_index и затем цикл, чтобы удалить все совпадения с df2 элементами в df1.

 df1 = pd.DataFrame({'id' : [1,2,3], 'date' : ['d1', 'd2', 'd3'], 'count': [11, 22, 33]})
 df2 = pd.DataFrame({'id' : [1,2,5], 'date' : ['d1', 'd5', 'd6'], 'count': [44, 55, 66]})
 df1 = df1.set_index(['id', 'date'])
 df2 = df2.set_index(['id', 'date'])

 for index, row in df2.iterrows():
     if index in df1.index:
         df1 = df1.drop(index)
 print(df1.append(df2))

         count
id date
2  d2       22
3  d3       33
1  d1       44
2  d5       55
5  d6       66
0 голосов
/ 19 февраля 2019

Я считаю, что то, что вы ищете, похоже на этот вопрос

Согласно ответу anky_91, вы должны получить желаемые результаты с df2.combine_first(df1)

Проверить документация для подробного объяснения поведения этой функции при объединении 2 нерегулярных фреймов данных.

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

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

В качестве игрушечного примера рассмотрим кадры:

df1 = pd.DataFrame({"id" : [1,2,3,4], "time" : [25, 35, 45, 15]})  
df2 = pd.DataFrame({"id" : [4,5,2,9], "time" : [19, 14, 11, 12]})  

Затем все, что вам нужно сделать, это объединить df1 и df2, отбросить дубликаты на id и сохранитьlast, чтобы убедиться, что информация хранится в df2.

df_concatenated = pd.concat([df1, df2]).drop_duplicates(subset="id", keep="last")   

df_concatenated  
>  id  time
    1    25
    3    45
    4    19
    5    14
    2    11
    9    12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...