Подтвердить что ты не робот

Python Pandas объединяет только определенные столбцы

Можно ли объединить несколько столбцов? У меня есть DataFrame df1 со столбцами x, y, z и df2 со столбцами x, a, b, c, d, e, f и т.д.

Я хочу объединить два DataFrames на x, но я хочу только объединить столбцы df2.a, df2.b - не весь DataFrame.

Результатом будет DataFrame с x, y, z, a, b.

Я мог бы объединить, а затем удалить ненужные столбцы, но кажется, что есть лучший метод.

4b9b3361

Ответ 1

Вы можете объединить суб-DataFrame (только с этими столбцами):

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])

Ответ 2

Вы хотите использовать TWO-скобки, поэтому, если вы выполняете действия VLOOKUP:

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

Это даст вам все в исходном файле df +, добавив в соответствующий столбец в df2, который вы хотите присоединиться.

Ответ 3

Вы можете использовать .loc, чтобы выбрать конкретные столбцы со всеми строками, а затем потянуть их. Ниже приведен пример:

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

В этом примере вы объединяете dataframe1 и dataframe2. Вы выбрали внешнее левое соединение на "ключ". Однако для dataframe2 вы указали .iloc, который позволяет вам указать строки и столбцы, которые вы хотите в числовом формате. Используя :, вы выбираете все строки, но [0:5] выбирает первые 5 столбцов. Вы можете использовать .loc для указания по имени, но если вы имеете дело с длинными именами столбцов, то .iloc может быть лучше.

Ответ 4

Это позволяет объединить выбранные столбцы из двух таблиц.

Если table_1 содержит столбцы t1_a,t1_b,t1_c..,id,..t1_z, и table_2 содержит столбцы t2_a, t2_b, t2_c..., id,..t2_z, и только t1_a, id, t2_a требуются в финальной таблице, затем

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file    
mergedCSV.to_csv('output.csv',index = False)

Ответ 5

Если вы хотите удалить столбец (столбцы) из целевого фрейма данных, но столбец (столбцы) необходимы для объединения, вы можете сделать следующее:

df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                left_on = 'key2', right_on = 'key1').drop('key1')

Часть .drop('key1') предотвратит сохранение 'key1' в результирующем фрейме данных, несмотря на то, что в первую очередь требуется соединение.

Ответ 6

У меня такая же ситуация, я пытаюсь построить слияние, похожее на следующий запрос

select
 rio.calculation_type,
 rio.asin, rio.country, rio.channel,
 rio.date, rio.running_inbound, 
 rio.running_outbound, 
 rio.inbound, 
 rio.outbound,
 ro.outbound as ro_outbound,
 min(ro.date) as date_out 
from
 running_inbound_and_outbound rio 
 left join running_outbound ro 
  on ro.running_outbound >= rio.running_inbound 
  and ro.country = rio.country 
  and ro.channel = rio.channel 
  and ro.asin = rio.asin 
  and ro.calculation_type = rio.calculation_type
 group by
  1, 2, 3, 4,5,6,7,8,9