Ответ 1
Вы можете объединить суб-DataFrame (только с этими столбцами):
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
Можно ли объединить несколько столбцов? У меня есть 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.
Я мог бы объединить, а затем удалить ненужные столбцы, но кажется, что есть лучший метод.
Вы можете объединить суб-DataFrame (только с этими столбцами):
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
Вы хотите использовать TWO-скобки, поэтому, если вы выполняете действия VLOOKUP:
df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')
Это даст вам все в исходном файле df +, добавив в соответствующий столбец в df2, который вы хотите присоединиться.
Вы можете использовать .loc
, чтобы выбрать конкретные столбцы со всеми строками, а затем потянуть их. Ниже приведен пример:
pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')
В этом примере вы объединяете dataframe1 и dataframe2. Вы выбрали внешнее левое соединение на "ключ". Однако для dataframe2 вы указали .iloc
, который позволяет вам указать строки и столбцы, которые вы хотите в числовом формате. Используя :
, вы выбираете все строки, но [0:5]
выбирает первые 5 столбцов. Вы можете использовать .loc
для указания по имени, но если вы имеете дело с длинными именами столбцов, то .iloc
может быть лучше.
Это позволяет объединить выбранные столбцы из двух таблиц.
Если 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)
Если вы хотите удалить столбец (столбцы) из целевого фрейма данных, но столбец (столбцы) необходимы для объединения, вы можете сделать следующее:
df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
left_on = 'key2', right_on = 'key1').drop('key1')
Часть .drop('key1')
предотвратит сохранение 'key1' в результирующем фрейме данных, несмотря на то, что в первую очередь требуется соединение.
У меня такая же ситуация, я пытаюсь построить слияние, похожее на следующий запрос
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