合并数据框并填充到矩阵

时间:2020-07-05 09:03:07

标签: python pandas merge

我想合并2个数据帧并同时返回矩阵和填充。 我的两个数据框是

AR = {"Supplier": ["A","A","A","B",],
      "Currency": ["AUD","AUD","USD","AUD"],
      "Day": [1,3,1,1],
      "Amount": [510,530,610,710]}
AR = pd.DataFrame(AR)

IntTable = {"Currency": ["AUD","AUD","AUD","USD","USD","USD"],
            "Day": [1,2,3,1,2,3],
            "InterestRate": [11,12,13,21,22,23]}
IntTable = pd.DataFrame(IntTable)

我尝试过

Table = pd.merge_ordered(IntTable, AR, on=['Currency','Day'], 
                         how= 'outer', fill_method='ffill', left_by=['Day'])

我得到的结果:

Result I get

我想要的结果

Result should be

1 个答案:

答案 0 :(得分:1)

这是实现您想要的方式。我首先创建结果的骨架:

  • 对于AR中供应商和货币的每种组合,您希望拥有全部三天的时间。
  • 然后,我填写相关数据:

    df = pd.merge(AR[["Supplier", "Currency"]].drop_duplicates().assign(dummy=1), 
             IntTable[["Day"]].drop_duplicates().assign(dummy=1), on = "dummy").drop("dummy", axis=1)
    df = pd.merge_ordered(df, IntTable, on = ["Day", "Currency"])
    df = df.sort_values(["Supplier", "Currency"])
    df = pd.merge_ordered(df, AR, on = ["Supplier", "Currency", "Day"], fill_method='ffill')
    print(df)

输出为:

  Supplier Currency  Day  InterestRate  Amount
0        A      AUD    1            11     510
1        A      AUD    2            12     510
2        A      AUD    3            13     530
3        A      USD    1            21     610
4        A      USD    2            22     610
5        A      USD    3            23     610
6        B      AUD    1            11     710
7        B      AUD    2            12     710
8        B      AUD    3            13     710