Предположим, у меня есть несколько фреймов данных Pandas, каждый из которых имеет несколько строк и столбцов, первый из которых содержит идентификатор чего-либо. То, что я хотел бы сделать, довольно просто то, что мне не удалось использовать слияние, соединение, объединение и т. Д ... Если первый столбец df1 и df2 одинаковый, добавьте столбец 2 до конца df2 в df1, иначе пропустите его .
Например:
dat1 = {'A':['1', '2', '3'],'B':['4', '7', '11'],
'C':['5', '8', '12'],'D':['6', '9', '13']}
df1 = pd.DataFrame.from_dict(dat1, orient='index')
dat2 = {'A':['1', '2', '3'],'B':['4', '7', '11'],
'C':['5', '8', '12'],'D':['6', '9', '13']}
df2 = pd.DataFrame.from_dict(dat2, orient='index')
В этом случае, поскольку первый столбец в обоих содержит A, B, C и D, объединенный фрейм данных будет иметь 4 строки и всего 6 столбцов.
df_merged
0 1 2 3 4 5
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13
Если бы вместо B во втором фрейме данных была буква E, то я бы вообще не стал их объединять.
df_merged
я написал в вопросе.
использовать слияние
pd.merge(df1,df2,left_index=True,right_index=True)
0_x 1_x 2_x 0_y 1_y 2_y
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13
def myFunc(df1,df2):
if len(np.intersect1d(df1.index.values, df2.index.values)) == len(df1.index.values) & len(np.intersect1d(df1.index.values, df2.index.values)) == len(df2.index.values):
df = pd.merge(df1,df2,left_index=True,right_index=True)
return df
else:
pass
Спасибо, но если я встречу фрейм данных с разными индексами строк (A, B, C и D), то он пересечется. Мне нужно вместо этого пропустить этот фрейм данных.
@sensitive_scientist, так почему бы просто не написать условие? Что-то вроде того, если индексы совпадают, тогда слияние еще проходит
с pd.concat, при склеивании нескольких DataFrames и последующем объединении их по желаемой оси, From панды док
>>> frames = [df1, df2]
>>> pd.concat(frames, axis=1)
0 1 2 0 1 2
A 1 2 3 1 2 3
B 4 7 11 4 7 11
C 5 8 12 5 8 12
D 6 9 13 6 9 13
Спасибо, но на самом деле я не этого хочу. Он вводит NaN, если в список я вставляю третий фрейм данных с другими индексами строк. Этот третий фрейм данных должен быть объединен тогда и только тогда, когда совпадает первый столбец.
@sensitive_scientist, это будет там, но если это похоже на то, что df1 или df2 тогда будет работать, добавьте еще один столбец в свой пример, который вы хотите добавить.
Желаемый результат?