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

熊猫链中柱的变化值

  •  1
  • astro123  · 技术社区  · 7 年前

    我有一个这样的数据集:

    year          artist           track  time date.entered  wk1  wk2
    2000           Pac           Baby   4:22   2000-02-26   87   82
    2000         Geher           The    3:15   2000-09-02   91   87
    2000    three_DoorsDown      Kryptonite  3:53   2000-04-08   81   70
    2000         ATeens          Dancing_Queen  3:44   2000-07-08   97   97
    2000         Aaliyah         I_Dont_Wanna  4:15   2000-01-29   84   62
    2000         Aaliyah         Try_Again  4:03   2000-03-18   59   53
    2000         Yolanda         Open_My_Heart  5:30   2000-08-26   76   76
    

    我想要的输出如下:

       year   artist          track  time       date  week  rank
    0  2000      Pac           Baby  4:22 2000-02-26     1    87
    1  2000      Pac           Baby  4:22 2000-03-04     2    82
    6  2000   ATeens  Dancing_Queen  3:44 2000-07-08     1    97
    7  2000   ATeens  Dancing_Queen  3:44 2000-07-15     2    97
    8  2000  Aaliyah   I_Dont_Wanna  4:15 2000-01-29     1    84
    

    基本上,我正在整理给定的广告牌数据。 如果没有熊猫链,我可以像这样轻松地做到:

    df = pd.read_clipboard()
    df1 = (pd.wide_to_long(df, 'wk', i=df.columns.values[:5], j='week')
     .reset_index()
     .rename(columns={'date.entered': 'date', 'wk': 'rank'}))
    
    df1['date'] = pd.to_datetime(df1['date']) + pd.to_timedelta((df1['week'] - 1) * 7, 'd')
    df1 = df1.sort_values(by=['track', 'date'])
    
    print(df1.head())
    

    问题
    有什么方法可以把 df1['date'] = pd.to_datetime(...) 部分?这样整个操作就可以适应单链?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    使用 assign :

    df1 = (pd.wide_to_long(df, 'wk', i=df.columns.values[:5], j='week')
             .reset_index()
             .rename(columns={'date.entered': 'date', 'wk': 'rank'})
             .assign(date = lambda x: pd.to_datetime(x['date']) + 
                                      pd.to_timedelta((x['week'] - 1) * 7, 'd'))
             .sort_values(by=['track', 'date'])
             )