通过索引组合多个Pandas DataFrames

时间:2018-01-05 22:21:44

标签: python pandas data-analysis

我对此持怀疑态度,希望有人能为我回答这个问题。我有一个DataFrames列表,只有一个时间戳作为索引和一个销售列(取决于状态)。我想要做的是组合列表中的所有DataFrame并输出一个新的。示例数据框将出现:

    |   time    | USA |   
    |-----------|-----|   
    | 12-1-2012 |   1 |   
    | 12-2-2012 |   1 | 
    | 12-3-2012 |   1 |  
    | 12-4-2012 |   3 |   
    | 12-5-2012 |   5 |   
    | 12-6-2012 |   6 |   
    | 12-7-2012 |   4 |   
    | 12-8-2012 |   2 |   
    | 12-9-2012 |   5 |   


    |   time    | UK  |
    |-----------|-----|
    | 12-1-2012 |   1 |
    | 12-2-2012 |   1 |
    | 12-5-2012 |   5 |
    | 12-6-2012 |   6 |
    | 12-7-2012 |   4 |
    | 12-8-2012 |   2 |
    | 12-9-2012 |   5 |


    |   time    | CAN |
    |-----------|-----|
    | 12-1-2012 |   1 |
    | 12-2-2012 |   1 |
    | 12-4-2012 |   3 |
    | 12-6-2012 |   4 |
    | 12-8-2012 |   2 |
    | 12-9-2012 |   5 |


    |   time    | USA | UK  | CAN |   
    |-----------|-----|-----|-----|   
    | 12-1-2012 |   1 |   1 |   1 |   
    | 12-2-2012 |   1 |   1 |   1 |
    | 12-3-2012 |   1 | NaN | NaN |    
    | 12-4-2012 |   3 | NaN | NaN |   
    | 12-5-2012 |   5 |   5 | NaN |   
    | 12-6-2012 |   6 |   6 |   6 |   
    | 12-7-2012 |   4 |   4 |   4 |   
    | 12-8-2012 |   2 |   2 |   2 |   
    | 12-9-2012 |   5 |   5 |   5 |  

最后一张表在技术上是我想要发生的事情。我希望所有这些内容在时间上合并,如果它没有该密钥,那么现在只需添加NaN值。我遇到了一些奇怪的事情。帧存储在列表中:

    dataframes = [d1,d2,d3]

我尝试过的是在加入时使用reduce方法,它似乎会破坏数据。这是一个完整的例子。

    d1 = ts.copy()
    d1.columns = ['time']
    d1.index = d1['time']
    # del d1['time']
    d1['USA'] = range(9)

    d2 = ts.copy()
    d2.columns = ['time']
    d2.index = d2['time']
    # del d2['time']
    d2['UK'] = range(9)

    d3 = ts.copy()
    d3.columns = ['time']
    d3.index = d3['time']
    # del d3['time']
    d3['UK'] = range(9)

    d2.drop(d2.index[[2,3]])
    d3.drop(d3.index[[2,4,6]])

    dataframes = [d1, d2, d3]

    df_final = reduce(lambda left,right: pd.merge(left,right,on='time'), dataframes)
    df_final

    # Output

    time    USA         UK_x    UK_y
    0       2012-12-01  0       0   0
    1       2012-12-02  1       1   1
    2       2012-12-03  2       2   2
    3       2012-12-04  3       3   3
    4       2012-12-05  4       4   4
    5       2012-12-06  5       5   5
    6       2012-12-07  6       6   6
    7       2012-12-08  7       7   7
    8       2012-12-09  8       8   8

有人可以引导我朝着正确的方向前进而不告诉我阅读文档。

提前致谢, 斯蒂芬

0 个答案:

没有答案