#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 — Ответ был отредактирован, необходимо
[]
выбрать столбцы