Нужно объединить два столбца из двух фреймов данных или два столбца из одного и того же фрейма данных

#python #pandas

#python #pandas

Вопрос:

У меня есть два фрейма данных. Я хочу объединить два разных столбца одного и того же / разных фрейма данных. У меня имена столбцов разные в обоих фреймах данных.

Я пробовал, как показано ниже. Но результат не соответствует ожиданиям.

 import pandas as pd

df1 = pd.DataFrame({
    'A': ['a','a','a'],
    'B': range(3)
})

df2 = pd.DataFrame({
    'C': ['c','c','c'],
    'D': ['4','5','6']
})

df = df1.join(df2)

print (df)
 

Но я ожидаю вывода в столбцах A и B df1, как показано ниже.

введите описание изображения здесь

Пожалуйста, взгляните и помогите мне с тем же.

Комментарии:

1. df1.append(df2.rename(columns={'C':'A','D':'B'}))

2. или pd.DataFrame(np.concatenate([df1.values, df2.values]), columns=['A', 'B'])

3. Спасибо вам обоим, но как насчет того, если у меня такой же фрейм данных и я хочу добавить вот так?

4. что вы имеете в виду same ? если вы хотите добавить df1 к df1, попробуйте pd.concat([df1]*3, ignore_index=True)

5. Я имею в виду, если у меня есть фрейм данных ниже и мне нужен тот же результат. df1 = pd.Фрейм данных({‘A’: [‘a1’, ‘a2′,’a3’], ‘B’: диапазон (3), ‘C’: [‘c1′,’c2′,’c3’], ‘D’: [‘4′,’5′,’6’] })

Ответ №1:

Я думаю, вам нужно rename , как упоминалось @wwnde в комментариях:

 df = df1.append(df2.rename(columns={'C':'A','D':'B'}), ignore_index=True)
 

Или:

 df = pd.concat([df1, df2.rename(columns={'C':'A','D':'B'})], ignore_index=True)
 

При необходимости задайте динамические столбцы по словарю, созданному из имен столбцов с zip :

 d = dict(zip(df2.columns, df1.columns))
df = df1.append(df2.rename(columns=d), ignore_index=True)
print (df)
   A  B
0  a  0
1  a  1
2  a  2
3  c  4
4  c  5
5  c  6
 

Редактировать:

 df1 = pd.DataFrame({ 'A': ['a1','a2','a3'], 'B': range(3), 'C': ['c1','c2','c3'], 'D': ['4','5','6'] })

df = df1[['A','B']].append(df1[['C','D']].rename(columns={'C':'A','D':'B'}), ignore_index=True)
print (df)
    A  B
0  a1  0
1  a2  1
2  a3  2
3  c1  4
4  c2  5
5  c3  6
 

Комментарии:

1. Как мне добиться того же результата, если у меня есть такой фрейм данных. df1 = pd.Фрейм данных({‘A’: [‘a1’, ‘a2′,’a3’], ‘B’: диапазон (3), ‘C’: [‘c1′,’c2′,’c3’], ‘D’: [‘4′,’5′,’6’] })

2. @OO7 — Ответ был отредактирован, необходимо [] выбрать столбцы