代码之家  ›  专栏  ›  技术社区  ›  HHH

如何在python中转换数据帧

  •  2
  • HHH  · 技术社区  · 8 年前

    Date,     value
    2017/1/1, 5
    2017/4/1, 6
    2017/4/5, 12
    2017/7/2, 15
    2018/4/1, 50
    2018/7/7, 11
    2017/1/1, 5
    

    我想把这个数据框转换成以下格式,其中的列是年/月,值在行中

    2017/1   2017/4  2017/7  2018/1  2018/4  2018/7
     5         6     15      5       50      11
               12     
    

    2 回复  |  直到 8 年前
        1
  •  1
  •   cs95 abhishek58g    8 年前

    你可以 groupby

    v = (df.set_index('Date')['value']
           .groupby(by=lambda x: x.rsplit('/', 1)[0], axis=0)
           .apply(list))
    pd.DataFrame(v.values.tolist(), index=v.index).T
    
       2017/1  2017/4  2017/7  2018/4  2018/7
    0     5.0     6.0    15.0    50.0    11.0
    1     5.0    12.0     NaN     NaN     NaN
    
        2
  •  0
  •   Alexander    8 年前

    示例数据帧

    df = pd.DataFrame({
        'Date': pd.DatetimeIndex(
            ['2017-01-01', '2017-04-01', '2017-04-05',
             '2017-07-02', '2018-04-01', '2018-07-07',
             '2017-01-01'], freq=None),
         'value': [5, 6, 12, 15, 50, 11, 5]})
    

    d = (df
     .assign(year_month=df['Date'].dt.strftime('%Y/%m'))
     .groupby('year_month')['value']
     .apply(list)
     .to_dict()
    )
    
    df = pd.concat([pd.Series(v, name=k) 
                    for k, v in d.iteritems()], axis=1)[sorted(d)]
    
    >>> df
       2017/01  2017/04  2017/07  2018/04  2018/07
    0        5        6       15       50       11
    1        5       12      NaN      NaN      NaN