json 将具有相同列/索引的两个panda DataFrame连接为一个DataFrame

enyaitl3  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(146)

我尝试将多个pandas.DataFrame合并保存在MongoDB中的一个集合中,所有的 Dataframe 都有相同的索引/列,我想使用to_json()方法将其保存在一个文档中。将 Dataframe 的所有单元格作为dict可能是一个好方法。
为了实现这一点,我希望将 Dataframe 如下所示:

df1:                
 index   A      B
 1     'A1'   'B1'
 2     'A2'   'B2'
 3     'A3'   'B3'

df2:
 index  A      B
 1    'a1'   'b1'
 2    'a2'   'b2'
 3    'a3'   'b3'

预期解决方案:

df_sol:
 index    A                    B
 1        {d1:'A1', d2:'a1'}   {d1:'B1', d2:'b1'}
 2        {d1:'A2', d2:'a2'}   {d1:'B2', d2:'b2'}
 3        {d1:'A3', d2:'a3'}   {d1:'B3', d2:'b3'}

有没有不使用迭代器的方法来完成这个任务?

6mw9ycah

6mw9ycah1#

pd.Panelapply + pd.Series.to_dict一起使用

pd.Panel(dict(d1=df1, d2=df2)).apply(pd.Series.to_dict, 0)

                              A                         B
index                                                    
1      {'d1': 'A1', 'd2': 'a1'}  {'d1': 'B1', 'd2': 'b1'}
2      {'d1': 'A2', 'd2': 'a2'}  {'d1': 'B2', 'd2': 'b2'}
3      {'d1': 'A3', 'd2': 'a3'}  {'d1': 'B3', 'd2': 'b3'}

这是假设您标记为index的列实际上是索引,否则,请确保它们是:

df1 = df1.set_index('index')
df2 = df2.set_index('index')
yhxst69z

yhxst69z2#

让我们试试这段代码:

df1 = df1.set_index('index')
df2 = df2.set_index('index')

df_int = pd.merge(df1,df2,left_index=True, right_index=True,suffixes=('_d1','_d2'))

A_dict = df_int[['A_d1','A_d2']].rename(columns={'A_d1':'d1','A_d2':'d2'}).to_dict(orient='records')
B_dict = df_int[['B_d1','B_d2']].rename(columns={'B_d1':'d1','B_d2':'d2'}).to_dict(orient='records')

df_sol = pd.DataFrame({'A':A_dict,'B':B_dict})

df_sol

输出:

A                         B
0  {'d1': 'A1', 'd2': 'a1'}  {'d1': 'B1', 'd2': 'b1'}
1  {'d1': 'A2', 'd2': 'a2'}  {'d1': 'B2', 'd2': 'b2'}
2  {'d1': 'A3', 'd2': 'a3'}  {'d1': 'B3', 'd2': 'b3'}

相关问题