【问题标题】:concat two pandas DataFrame with same column/index into one DataFrame将具有相同列/索引的两个 pandas DataFrame 合并为一个 DataFrame
【发布时间】:2017-09-02 01:03:35
【问题描述】:

我正在尝试在一个集合中将多个 pandas.DataFrame 保存在 mongodb 中,所有数据帧都具有相同的索引/列,我想将其保存在一个文档中,使用 @987654323 @ 方法。将数据框的所有单元格作为字典,这可能是一个好方法。为了实现这一点,我想像这样连接数据框:

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'}

有没有办法在不使用迭代器的情况下实现这一点?任何指导将不胜感激!谢谢!

【问题讨论】:

    标签: json mongodb pandas


    【解决方案1】:

    使用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')
    

    【讨论】:

    • 这个解决方案现在给出了一个DeprecationWarning : Panel is deprecated and will be removed in a future version. 它有解决Panel 实现的方法吗?
    • @PabloA 打开一个新问题。提出相同的问题,但参考 pandas.Panel 现在已弃用,您需要一个替代方案。
    • @PabloA 我有另一种等待,其他人甚至可能提供更好的等待。
    • 谢谢@PabloA。我已经回答过了(-:
    【解决方案2】:

    让我们试试这段代码:

    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'}
    

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2020-06-13
      • 2020-05-12
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2015-10-26
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多