Pandas объединить по точному совпадению и столбцу даты с условием - PullRequest
0 голосов
/ 21 марта 2020

Я хочу использовать pd.merge, чтобы соединить слева df1 с df2, используя ID и Company в качестве точных совпадений и дат совпадений, где df1 ['Date1'] больше, чем df2 ['Date2']. Проблема в том, что я получаю дубликаты, потому что df2 имеет несколько совпадений.

df1:

Company   Revenue     ID        Date1
 XX       1000.0    12345x    2020-02-11
 XX       6000.0    12345x    2020-01-02
 AA       5000.0    12346a    2019-12-20
 BB       100.0     22345x    2019-11-07
 FF       18000.0   32345x    2020-01-11    

df2:

Company   Clicks     ID         Date2
 XX       1         12345x    2019-07-11
 XX       0         12345x    2020-01-10
 AA       0         12346a    2019-12-27
 BB       1         22345x    2019-11-07
 FF       1         32345x    2019-03-11
 FF       0         32345x    2019-08-28

Я пробовал использовать все типы слияний, отбрасывая дублирует из df2 и даже используя групповую.

pd.merge_asof(df1, df2, by=['Company','ID'], left_on='Date1', right_on='Date2', allow_exact_matches=False)

Я поиграл с другими параметрами для merge_asof, т.е. direction = 'forward' и допуск, но он не работает. Я в основном вытаскиваю совпадения из df2, где Date2 предшествует Date1 без повторяющихся дат / совпадений. В случае, когда Company = 'FF', я бы предпочел сопоставить запись, где клики, если это возможно, больше 0.

Ожидаемый результат:

Company   Revenue     ID        Date1      Date2        Clicks
 XX       1000.0    12345x    2020-02-11   2020-01-10    0
 XX       6000.0    12345x    2020-01-02   2019-07-11    1
 AA       5000.0    12346a    2019-12-20   N/A           N/A
 BB       100.0     22345x    2019-11-07   N/A           N/A
 FF       18000.0   32345x    2020-01-11   2019-03-11    1
...