Объединение 2 фреймов данных в 3 столбца, где иногда существуют данные - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь объединить и заполнить пропущенные значения в одном кадре данных из другого. Надеюсь, это не слишком длинное объяснение, я просто слишком долго ломал голову над этим. Я работаю с 2 огромными файлами CSV, поэтому я сделал небольшой пример здесь. Я включил весь код в конце на случай, если вам будет интересно помочь. ОГРОМНОЕ СПАСИБО ЗАРАНЕЕ. Здесь мы go!

print(df1)
   A   B   C   D   E
0  1  B1      D1  E1
1         C1  D1  E1
2  1  B1      D1  E1
3  2  B2      D2  E2
4     B2  C2  D2  E2
5  3          D3  E3
6  3  B3  C3  D3  E3
7  4      C4  D4  E4

print(df2)

   A   B   C   F   G
0  1      C1  F1  G1
1     B2  C2  F2  G2
2  3  B3      F3  G3
3  4  B4  C4  F4  G4

Я бы хотел объединить df2 в df1 тремя разными столбцами. Я понимаю, что вы можете объединить несколько имен столбцов, но это, кажется, не дает мне желаемого результата. Я хотел бы сохранить все данные в df1 и заполнить данные из df2, поэтому я использую how = 'left'.

Я довольно новичок в python и провел много исследований, но застрял в тупике. Вот то, что я пробовал.

data3 = df1.merge(df2, how='left', on=['A'])

print(data3)

   A B_x C_x   D   E  B_y  C_y    F    G
0  1  B1      D1  E1        C1   F1   G1
1         C1  D1  E1   B2   C2   F2   G2
2  1  B1      D1  E1        C1   F1   G1
3  2  B2      D2  E2  NaN  NaN  NaN  NaN
4     B2  C2  D2  E2   B2   C2   F2   G2
5  3          D3  E3   B3        F3   G3
6  3  B3  C3  D3  E3   B3        F3   G3
7  4      C4  D4  E4   B4   C4   F4   G4

Как вы можете видеть здесь, это вроде работало только с A, однако, поскольку это CSV-файл с пустыми значениями. пустые значения, кажется, сливаются воедино. который я не хочу. потому что df2 был пуст в строке 2, он заполнил данные, где он видел пробелы, что не то, что я хочу. это должно быть NaN, если не удалось найти совпадение.

всякий раз, когда я начинаю помещать дополнительные строки в мой "on = ['A', 'B'], он не делает ничего другого. фактически, A больше не сливается.

data3 = df1.merge(df2, how='left', on=['A', 'B'])
print(data3)

   A   B C_x   D   E  C_y    F    G
0  1  B1      D1  E1  NaN  NaN  NaN
1         C1  D1  E1  NaN  NaN  NaN
2  1  B1      D1  E1  NaN  NaN  NaN
3  2  B2      D2  E2  NaN  NaN  NaN
4     B2  C2  D2  E2   C2   F2   G2
5  3          D3  E3  NaN  NaN  NaN
6  3  B3  C3  D3  E3        F3   G3
7  4      C4  D4  E4  NaN  NaN  NaN

Строки A, B и C - это значения, которые я хочу коррелировать и объединять. Используя оба фрейма данных, он должен знать достаточно, чтобы заполнить все пробелы. Мой конец df должен выглядеть так:

print(desired_output):

   A   B   C   D   E   F   G
0  1  B1  C1  D1  E1  F1  G1
1  1  B1  C1  D1  E1  F1  G1
2  1  B1  C1  D1  E1  F1  G1
3  2  B2  C2  D2  E2  F2  G2
4  2  B2  C2  D2  E2  F2  G2
5  3  B3  C3  D3  E3  F3  G3
6  3  B3  C3  D3  E3  F3  G3
7  4  B4  C4  D4  E4  F4  G4

, хотя A, B и C имеют повторяющиеся строки, я хочу сохранить ВСЕ данные и просто заполнить данные из df2, где они могут поместиться, даже если это это повторяющиеся данные. Я также не хочу, чтобы все _x и _y суффиксы от слияния. Я знаю, как переименовать, но делая 3 различных слияния, и объединение этих слияний становится действительно очень сложным с повторяющимися строками и суффиксами .. .

Короче говоря, как я могу объединить оба фрейма данных по A, а затем B, а затем C? Порядок, в котором это происходит, не имеет значения.

Вот пример фактических данных. У меня есть свои данные, которые имеют дополнительные данные, и я связываю их с этими данными по определенным идентификаторам. в основном по MMSI, Имени и ИМО. я хочу сохранить дубликаты, потому что они на самом деле не являются дубликатами, просто дополнительные точки данных для каждого судна

MMSI         BaseDateTime          LAT        LON       VesselName      IMO CallSign
366940480.0  2017-01-04T11:39:36  52.48730 -174.02316    EARLY DAWN     7821130  WDB7319
366940480.0  2017-01-04T13:51:07  52.41575 -174.60041    EARLY DAWN     7821130  WDB7319
273898000.0  2017-01-06T16:55:33  63.83668 -174.41172  MYS CHUPROVA         NaN     UAEZ
352844000.0  2017-01-31T22:51:31  51.89778 -176.59334         JACHA  8512920    3EFC4
352844000.0  2017-01-31T23:06:31  51.89795 -176.59333         JACHA  8512920    3EFC4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...