Панды - объединение двух df в неуникальную дату (внешнее объединение) - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть два df'а, которые я хотел бы объединить немного необычным способом.

df's:

df1:
Index      colA 
2012-01-02  1
2012-01-05  2
2012-01-10  3
2012-01-10  4

, а затем df2:

Index      colB
2012-01-01  6
2012-01-05  7
2012-01-08  8
2012-01-10  9

Вывод:

Index      colA colB
2012-01-01  NaN   6
2012-01-02  1     NaN
2012-01-05  2     7
2012-01-08  NaN   8
2012-01-10  3     9
2012-01-10  4     NaN
  • Рад получить вывод NaN, если между цифрами df нет соответствующей даты.
  • Если есть совпадающая дата, я хотел бы вернуть обастолбцы.
  • Может быть случай, когда одна дата имеет, например.20 строк в df1 и 15 строк в df2 .. он будет совпадать с первыми 15 (не заботясь о порядке) и затем возвращает NaN для последних 5 строк в df2.

При попыткесделать это самостоятельно с pd.merge() и другими, которые я не могу, потому что дата, очевидно, не уникальна для индекса.

Есть предложения, как получить намеченное поведение?

Спасибо

Ответы [ 2 ]

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

Использование join() должно работать

df1.join(df2, how='outer', sort=True)
0 голосов
/ 26 февраля 2019

Вам может потребоваться создать вспомогательный ключ с cumcount

df1=df1.assign(key=df1.groupby('Index').cumcount())
df2=df2.assign(key=df2.groupby('Index').cumcount())
fdf=df1.merge(df2,how='outer').drop('key',1).sort_values('Index')
fdf
Out[104]: 
        Index  colA  colB
4  2012-01-01   NaN   6.0
0  2012-01-02   1.0   NaN
1  2012-01-05   2.0   7.0
5  2012-01-08   NaN   8.0
2  2012-01-10   3.0   9.0
3  2012-01-10   4.0   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...