【问题标题】:How to concat two dataframes in python如何在python中连接两个数据框
【发布时间】:2018-04-25 02:05:27
【问题描述】:

我有两个数据框,我想加入它们,这样我就可以在单个数据框中检查每年那一周的数量。

df1=  City  Week        qty       Year
      hyd   35          10        2015
      hyd   36          15        2015
      hyd   37          11        2015
      hyd   42          10        2015
      hyd   23          10        2016
      hyd   32          15        2016
      hyd   37          11        2017
      hyd   42          10        2017
      pune  35          10        2015
      pune  36          15        2015
      pune  37          11        2015
      pune  42          10        2015
      pune  23          10        2016
      pune  32          15        2016
      pune  37          11        2017
      pune  42          10        2017

 df2= city  Week         qty       Year
      hyd   23          10        2015
      hyd   32          15        2015
      hyd   35          12        2016
      hyd   36          15        2016
      hyd   37          11        2016
      hyd   42          10        2016
      hyd   43          12        2016
      hyd   44          18        2016
      hyd   35          11        2017
      hyd   36          15        2017
      hyd   37          11        2017
      hyd   42          10        2017
      hyd   51          14        2017
      hyd   52          17        2017
      pune  35          12        2016
      pune  36          15        2016
      pune  37          11        2016
      pune  42          10        2016
      pune  43          12        2016
      pune  44          18        2016
      pune  35          11        2017
      pune  36          15        2017
      pune  37          11        2017
      pune  42          10        2017
      pune  51          14        2017
      pune  52          17        2017

我想加入两个数据框,如结果所示,我想在单个数据框中附加每个城市每年那一周的数量。

    city   Week  qty   Year   y2016_wk  qty    y2017_wk  qty y2015_week qty
     hyd    35   10    2015    2016_35    12     2017_35   11   nan      nan
     hyd    36   15    2015    2016_36    15     2017_36   15   nan      nan
     hyd    37   11    2015    2016_37    11     2017_37   11   nan      nan
     hyd    42   10    2015    2016_42    10     2017_42   10   nan      nan
     hyd    23   10    2016    nan        nan    2017_23   x    2015_23   10
     hyd    32   15    2016    nan        nan    2017_32   y    2015_32   15
     hyd    37   11    2017    2016_37    11       nan     nan 2015_37   x
     hyd    42   10    2017    2016_42    10       nan     nan 2015_42   y
     pune   35   10    2015    2016_35    12     2017_35     11  nan     nan 
     pune   36   15    2015    2016_36    15     2017_36     15  nan     nan
     pune   37   11    2015    2016_37    11     2017_37     11  nan     nan
     pune   42   10    2015    2016_42    10     2017_42     10  nan     nan

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以将任务分解为几个步骤:

    1. 组合您的数据框 df1 和 df2。
    2. 根据您的组合数据框创建数据框列表,按年份拆分。
    3. 同时,重命名列以反映年份,将索引设置为Week。
    4. 最后,将axis=1 和reset_index 连接起来。

    这是一个例子:

    df = pd.concat([df1, df2], ignore_index=True)
    
    dfs = [df[df['Year'] == y].rename(columns=lambda x: x+'_'+str(y) if x != 'Week' else x)\
                              .set_index('Week') for y in df['Year'].unique()]
    
    res = pd.concat(dfs, axis=1).reset_index()
    

    结果:

    print(res)
    
       Week  qty_2015  Year_2015  qty_2016  Year_2016  qty_2017  Year_2017
    0    35      10.0     2015.0      12.0     2016.0      11.0     2017.0
    1    36      15.0     2015.0      15.0     2016.0      15.0     2017.0
    2    37      11.0     2015.0      11.0     2016.0      11.0     2017.0
    3    42      10.0     2015.0      10.0     2016.0      10.0     2017.0
    4    43       NaN        NaN      12.0     2016.0       NaN        NaN
    5    44       NaN        NaN      18.0     2016.0       NaN        NaN
    6    51       NaN        NaN       NaN        NaN      14.0     2017.0
    7    52       NaN        NaN       NaN        NaN      17.0     2017.0
    

    【讨论】:

    • 嗨 jpp 非常感谢你,我已经更新了我的问题,请查看它
    【解决方案2】:

    我个人认为您的示例输出不那么可读,因此除非您出于特定原因需要该格式,否则我可能会考虑使用数据透视表。我也认为所需的代码更简洁。

    import pandas as pd 
    
    df3 = pd.concat([df1, df2], ignore_index=True)
    df4 = df3.pivot(index='Week', columns='Year', values='qty')
    
    print(df4)
    
    Year  2015  2016  2017
    Week                  
    35    10.0  12.0  11.0
    36    15.0  15.0  15.0
    37    11.0  11.0  11.0
    42    10.0  10.0  10.0
    43     NaN  12.0   NaN
    44     NaN  18.0   NaN
    51     NaN   NaN  14.0
    52     NaN   NaN  17.0
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 2021-09-11
      • 2015-07-08
      • 2014-03-23
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      相关资源
      最近更新 更多