Объедините несколько фреймов данных в пустой фрейм данных с фиксированным индексом, объединяя столбцы или добавляя их - PullRequest
2 голосов
/ 07 июня 2019

У меня есть фрейм данных с индексом диапазона и без данных, в реальных данных индекс - это временной диапазон.

* 1003 Е.Г. *

df_main = pd.DataFrame(index = pd.RangeIndex(0,15,1))

См. Фиг.1

И у меня есть несколько фреймов данных с разными столбцами и индексами, я просто хочу присоединить их к основному фрейму данных на основе индекса:

df1 = pd.DataFrame({'value': [1, 2, 3, 5]}, index = pd.RangeIndex(0,4,1))
df2 = pd.DataFrame({'value': [5, 6, 7, 8]}, index = pd.RangeIndex(4,8,1))
df3 = pd.DataFrame({'value2': [9, 8, 7, 6]}, index = pd.RangeIndex(0,4,1))
df4 = pd.DataFrame({'value': [1, 2],'value2': [3, 4],'value3': [5, 6]}, index = pd.RangeIndex(10,12,1))

См. Рис 2,3,4,5

Я попробовал concat:

display(pd.concat([df_main,df1,df2,df3,df4]))

Что дает мне нежелательный вывод, который вы видите на Рис. 6.

Я также попытался соединиться, что приводит к ошибке, которую я не понял:

ValueError: Indexes have overlapping values: Index(['value', 'value2'], dtype='object')

То, что я хочу, это вывод, который вы видите на Рис.7.

Figures

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Вы можете groupby индексировать и агрегировать с first:

pd.concat([df_main, df1, df2, df3, df4]).groupby(level=0).first()

[вне]

    value  value2  value3
0     1.0     9.0     NaN
1     2.0     8.0     NaN
2     3.0     7.0     NaN
3     5.0     6.0     NaN
4     5.0     NaN     NaN
5     6.0     NaN     NaN
6     7.0     NaN     NaN
7     8.0     NaN     NaN
8     NaN     NaN     NaN
9     NaN     NaN     NaN
10    1.0     3.0     5.0
11    2.0     4.0     6.0
12    NaN     NaN     NaN
13    NaN     NaN     NaN
14    NaN     NaN     NaN
2 голосов
/ 07 июня 2019

Использование reduce и DataFrame.combine_first:

from functools import reduce
df = reduce((lambda x, y: x.combine_first(y)), [df_main,df1,df2,df3,df4])

print(df)

    value  value2  value3
0     1.0     9.0     NaN
1     2.0     8.0     NaN
2     3.0     7.0     NaN
3     5.0     6.0     NaN
4     5.0     NaN     NaN
5     6.0     NaN     NaN
6     7.0     NaN     NaN
7     8.0     NaN     NaN
8     NaN     NaN     NaN
9     NaN     NaN     NaN
10    1.0     3.0     5.0
11    2.0     4.0     6.0
12    NaN     NaN     NaN
13    NaN     NaN     NaN
14    NaN     NaN     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...