首页 > 解决方案 > 在追加模式下使用多索引连接 df

问题描述

好的,这是我想使用多索引的问题,以便我有一个 3-d df。我可以用

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

但是如何在 df 上添加新的 df3?本质上我想在附加模式下的循环中添加一个新的df?我有几千个 dfs 并在连接它们之前将它们全部存储起来不会有效率。有没有办法做到这一点?

更具体地说,假设我有以下 df

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 吗?

标签: pandas

解决方案


所以经过一番搜索,我发现最好的方法是先创建最终的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

推荐阅读