У вас есть несколько доступных вариантов в зависимости от размера ваших DataFrame
и именно того, что вы хотите.
Во-первых, получите даты в том же формате, используя pd.to_datetime
.Также убедитесь, что столбцы имеют одинаковые имена в каждом df
import pandas as pd
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'], format='%Y%m%d')
print(df1)
date val1 val2 val3 val4
0 2018-06-07 AAA 26543.0 123 0.0
1 2018-06-07 AAA 26512.0 123 1.0
print(df2)
date val1 val2 val3 val4
0 2018-06-08 B 12345 343 0
1 2018-06-07 AAA 26512 123 1
2 2018-06-08 C 123 343 0
3 2018-06-07 AAA 26543 123 0
pd.merge
Вы можете выполнить слияние outer
с аргументом indicator
, которое затемсообщает, каким строкам соответствуют какие DataFrame
с.
pd.merge(df1, df2, how='outer', indicator=True)
Выходы:
date val1 val2 val3 val4 _merge
0 2018-06-07 AAA 26543.0 123 0.0 both
1 2018-06-07 AAA 26512.0 123 1.0 both
2 2018-06-08 B 12345.0 343 0.0 right_only
3 2018-06-08 C 123.0 343 0.0 right_only
Первые две строки отображаются как df1
и df2
, а две нижниестроки появляются только в df2
.Если вам нужны только общие строки, просто используйте объединение inner
.
pd.merge(df1, df2, how='inner')
date val1 val2 val3 val4
0 2018-06-07 AAA 26543 123 0
1 2018-06-07 AAA 26512 123 1
duplicated
Если df1
и df2
не содержат дублирующихся строк,затем вы можете просто объединить оба и затем найти дублированные строки в объединенном df
, чтобы увидеть, какие разделены между обоими кадрами.
df = pd.concat([df1, df2])
df[df.duplicated()]
Выходы:
date val1 val2 val3 val4
1 2018-06-07 AAA 26512.0 123 1.0
3 2018-06-07 AAA 26543.0 123 0.0