pandas - 在追加模式下使用多索引连接 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 吗?
解决方案
所以经过一番搜索,我发现最好的方法是先创建最终的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