concat df с мультииндексом в режиме добавления - PullRequest
0 голосов
/ 07 декабря 2018

Хорошо, вот мой вопрос, я хочу использовать мультииндексацию, чтобы у меня был 3-й df.Я могу использовать

df = pd.concat([df1, df2], keys=('df1','df2'))

, но как мне добавить новый df3 на df?По сути, я хочу добавить новый DF в цикле в режиме добавления?У меня есть несколько тысяч dfs, и я храню их все, прежде чем конкатировать их, не будет эффективным.Есть способ сделать это?

более конкретно, давайте предположим, что у меня есть следующие df's

df1 = pd.DataFrame(columns=['a', 'b', 'c'])
df2 = pd.DataFrame(columns=['a', 'b', 'c'])
df1.loc['index_1','b'] = 1
df1.loc['index_2','a'] = 2

df2.loc['index_7','a'] = 5
df3 = pd.DataFrame(columns=rating_matrix.columns)
df3.loc['index_9','c'] = 1

df = pd.concat([df1, df2], keys=('df1','df2'))


    a   b   c
df1     index_1     NaN     1   NaN
        index_2     2   NaN     NaN
df2     index_7     5   NaN     NaN

hopw, я могу добавить аналогичным образом df3?

1 Ответ

0 голосов
/ 10 декабря 2018

Итак, после небольшого поиска я обнаружил, что лучший способ - сначала создать финальный df, сбросить его индекс и установить финальный мультииндекс.Это должно выглядеть примерно так:

# create df's
df1 = pd.DataFrame(columns=['a', 'b', 'c'])
df2 = pd.DataFrame(columns=['a', 'b', 'c'])
df3 = pd.DataFrame(columns=['a', 'b', 'c'])

df1.loc['index_1','b'] = 1
df1.loc['index_2','a'] = 2
df2.loc['index_7','a'] = 5
df3.loc['index_9','c'] = 1

# add index in the form of a column
df1['df'] = 'df1' 
df2['df'] = 'df2'
df3['df'] = 'df3'

# reset index and set multiindex
df = pd.concat([df1, df2, df3], sort=True)
df.reset_index(inplace=True)
df.set_index(['df', 'index'], inplace=True)
df



                         a       b       c
df  index           
df1         index_1     NaN      1      NaN
            index_2      2      NaN     NaN
df2         index_7      5      NaN     NaN
df3         index_9     NaN     NaN      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...