Как объединить два одинаковых фрейма данных в pandas, различая повторения по идентификатору? - PullRequest
0 голосов
/ 24 марта 2020

В python3 и pandas У меня есть два кадра данных с одинаковой структурой

df_posts_final_1.info()
<class 'pandas.core.frame.DataFrame'>                                           
RangeIndex: 32669 entries, 0 to 32668
Data columns (total 12 columns):
post_id        32479 non-null object
text           31632 non-null object
post_text      30826 non-null object
shared_text    3894 non-null object
time           32616 non-null object
image          24585 non-null object
likes          32669 non-null object
comments       32669 non-null object
shares         32669 non-null object
post_url       26157 non-null object
link           4343 non-null object
cpf            32669 non-null object
dtypes: object(12)
memory usage: 3.0+ MB

df_posts_final_2.info()
<class 'pandas.core.frame.DataFrame'>                                           
RangeIndex: 33883 entries, 0 to 33882
Data columns (total 12 columns):
post_id        33698 non-null object
text           32755 non-null object
post_text      31901 non-null object
shared_text    3986 non-null object
time           33829 non-null object
image          25570 non-null object
likes          33883 non-null object
comments       33883 non-null object
shares         33883 non-null object
post_url       27286 non-null object
link           4446 non-null object
cpf            33883 non-null object
dtypes: object(12)
memory usage: 3.1+ MB

Я хочу объединить их, и я мог бы просто сделать это так:

frames = [df_posts_final_1, df_posts_final_1]
result = pd.concat(frames)

Но столбец "post_id" имеет уникальные идентификационные коды. Поэтому, когда в df_posts_final_1 есть идентификатор "X", ему не нужно появляться два раза в конечном результате для фрейма данных

Пример, если код "FLK1989" появляется в df_posts_final_1, а также в df_posts_final_2, я оставляю только последняя запись, которая была в df_posts_final_2

Пожалуйста, кто-нибудь знает правильную стратегию, чтобы сделать это?

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Исправьте ваш код добавьте groupby + tail

frames = [df_posts_final_1, df_posts_final_2]
result = pd.concat(frames).groupby('post_id').tail(1)

Или мы сделаем drop_duplicates

frames = [df_posts_final_2,df_posts_final_1]#order here is important 
result = pd.concat(frames).drop_duplicates('post_id')
1 голос
/ 24 марта 2020

Попробуйте использовать:

result = pd.concat(frames).drop_duplicates(subset='post_id', keep='last')

Параметр keep='last' сохранит только второй, как вы хотите.

...