Объединить несколько фреймов данных в один фрейм данных в Python - PullRequest
1 голос
/ 07 ноября 2019

У меня есть 4 фрейма данных, как указано ниже

df = pd.DataFrame({_id:[1,2,3,4], name:[Charan, Kumar, Nikhil, Kumar], })

df1 = pd.DataFrame({_id:[1,3,4], count_of_apple:[5,3,1]})


df2 = pd.DataFrame({_id:[1,2,3], count_of_organge:[8,4,6]})


df3 = pd.DataFrame({_id:[2,3,4], count_of_lime:[7,9,2]})

Я хочу объединить все фреймы данных в один фрейм данных, называемый окончательным

Я пытался использовать PD.merge, нопроблема в том, что я должен сделать это 3 раза, есть ли более простой способ сделать это?

Я использовал приведенный ниже код, чтобы получить результат

final = pd.merge(df, df1, on='_id', how='left')


final = pd.merge(final, df2, on='_id', how='left')


final = pd.merge(final, df3, on='_id', how='left')

Я бы хотелконечный результат будет примерно таким:

final.head ()

_id |имя |количество апельсинов |количество яблок |количество извести

1 |Чаран |5 |8 |Na

2 |Кумар |Na |4 |7

3 |Нихил |3 |6 |9

4 |Кумар |1 |Na |2

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Из документации https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
   ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
   ...:                    index=[0, 1, 2, 3])
   ...:

In [8]: df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
   ...:                     'D': ['D2', 'D3', 'D6', 'D7'],
   ...:                     'F': ['F2', 'F3', 'F6', 'F7']},
   ...:                    index=[2, 3, 6, 7])
   ...: 

In [9]: result = pd.concat([df1, df4], axis=1, sort=False)

Вывод: enter image description here

0 голосов
/ 07 ноября 2019

Вы можете использовать concat, но сначала необходимо преобразовать _id в индекс для каждого DataFrame на DataFrame.set_index:

dfs = [df, df1, df2, df3]

df = pd.concat([x.set_index('_id') for x in dfs], axis=1).reset_index()

На что же похоже:

df = df.set_index('_id')
df1 = df1.set_index('_id')
df2 = df2.set_index('_id')
df3 = df3.set_index('_id')

df = pd.concat([df, df1, df2, df3], axis=1).reset_index()

print (df)
   _id    name  count_of_apple  count_of_organge  count_of_lime
0    1  Charan             5.0               8.0            NaN
1    2   Kumar             NaN               4.0            7.0
2    3  Nikhil             3.0               6.0            9.0
3    4   Kumar             1.0               NaN            2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...