объединить pandas фреймы данных по значению из столбца - PullRequest
1 голос
/ 24 февраля 2020

У меня есть 3 pandas фреймов данных со структурой, похожей на:

pandas1:
date    star    col1    col2    
2019-01-30T00:32:18.128 tau_Cet 12  25
2019-01-30T00:34:05.525 tau_Cet 23  466
2019-01-03T03:54:59.886 HD_41248    344 997
2019-01-06T03:54:25.886 51_Peg  353 458


pandas2:
date    star    col3    col4    
2019-01-30T00:32:18.128 tau_Cet 1   2
2019-01-30T00:34:05.525 tau_Cet 2   4
2019-01-03T03:54:59.886 HD_41248    34  99
2019-01-06T03:54:25.886 51_Peg  33  45


pandas3:
date    star    col5    col 4   
2019-01-30T00:32:18.128 tau_Cet 4   2
2019-01-30T00:34:05.525 tau_Cet 5   4
2019-01-03T03:54:59.886 HD_41248    3   99
2019-01-06T03:54:25.886 51_Peg  333 45

Как объединить их все в поле date?

Некоторые свойства:

  • данные для построения каждого фрейма данных считываются из отдельных файлов, разделенных табуляцией

  • поле date будет уникальным для каждой строки в каждой pandas, d будет связующим ключом между всеми параметрами;

  • данные в столбцах col1-5 могут быть разных типов (строка, число с плавающей точкой, дата и т. д. c)

  • столбцы col1-5 могут иметь или не иметь одинаковый заголовок. Если заголовок совпадает, значение таблицы также будет таким же.

ожидаемый конечный результат:

pandasMerged
date    star    col1    col2    col3    col4    col5
2019-01-30T00:32:18.128 tau_Cet     12  25  1   2   4
2019-01-30T00:34:05.525 tau_Cet     23  466 2   4   5
2019-01-03T03:54:59.886 HD_41248    344 997 34  99  3
2019-01-06T03:54:25.886 51_Peg      353 458 33  45  333

Есть идеи / предложения?

Спасибо, Хорхе

1 Ответ

1 голос
/ 24 февраля 2020

Используйте concat в списке для ввода с DataFrame.set_index на первом шаге, затем удалите дублированные столбцы с помощью DataFrame.loc и инвертированную маску с помощью Index.duplicated и последнее преобразование MultiIndex в столбцы по DataFrame.reset_index:

dfs = [pandas1,pandas2,pandas3]

df = pd.concat([x.set_index(['date','star']) for x in dfs], axis=1)
df = df.loc[:, ~df.columns.duplicated()].reset_index()
print (df)
                      date      star  col1  col2  col3  col4  col5
0  2019-01-30T00:32:18.128   tau_Cet    12    25     1     2     4
1  2019-01-30T00:34:05.525   tau_Cet    23   466     2     4     5
2  2019-01-03T03:54:59.886  HD_41248   344   997    34    99     3
3  2019-01-06T03:54:25.886    51_Peg   353   458    33    45   333
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...