Я пытаюсь объединить и заполнить пропущенные значения в одном кадре данных из другого. Надеюсь, это не слишком длинное объяснение, я просто слишком долго ломал голову над этим. Я работаю с 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