猿问

Dataframe shift 将数据移动到随机列中?

我正在使用代码来移动看起来有点类似于此的时间序列数据:


Year    Player          PTSN    AVGN                               

2018    Aaron Donald    280.60  17.538  

2018    J.J. Watt       259.80  16.238  

2018    Danielle Hunter 237.60  14.850  

2017    Aaron Donald    181.0   12.929  

2016    Danielle Hunter 204.6   12.788

目的是让它变成这样:


                        AVGN   PTSN  AVGN_prev  PTSN_prev

Player          Year                                     

Aaron Donald    2016     NaN    NaN        NaN        NaN

                2017  12.929  181.0        NaN        NaN

                2018  17.538  280.6     12.929      181.0

Danielle Hunter 2016  12.788  204.6        NaN        NaN

                2017   8.325  133.2     12.788      204.6

                2018  14.850  237.6      8.325      133.2

J.J. Watt       2016     NaN    NaN        NaN        NaN

                2017     NaN    NaN        NaN        NaN

                2018  16.238  259.8        NaN        NaN

我正在使用此代码来实现这一目标:


res = df.set_index(['player', 'Year'])


idx = pd.MultiIndex.from_product([df['player'].unique(), 

                                  df['Year'].unique()],

                                names=['Player', 'Year'])


res = res.groupby(['player', 'Year']).apply(sum)


res = res.reindex(idx).sort_index()

res[columns] = res.groupby('Player')[list(res.columns)].shift(1)

添加 groupby.sum() 因为数据框中的一些球员在同一赛季从一支球队转移到另一支球队,我想合并这些数字。但是,我拥有的数据实际上非常错误。数据有太多列要发布,但似乎是将前一年 (_prev) 的数据放入随机列中。它不会改变,并且总是将它放在相同的错误列中。这是由 groupby.sum() 引起的问题吗?是不是因为我使用了一个列变量(包含与 res.columns 相同的名称,并附加了一个 str(_prev))和一个列表(res.columns)?不管是哪一种,我该如何解决这个问题?

幕布斯6054654
浏览 149回答 1
1回答

慕标琳琳

我建议使用:#first aggregate for unique MultiIndex res = df.groupby(['Player', 'Year']).sum()#MultiIndexidx = pd.MultiIndex.from_product(res.index.levels,                                names=['Player', 'Year'])#aded new missing years res = res.reindex(idx).sort_index()#shift all columns, add suffix and join to originalres = res.join(res.groupby('Player').shift().add_suffix('_prev'))print (res)                       PTSN    AVGN  PTSN_prev  AVGN_prevPlayer          Year                                     Aaron Donald    2016    NaN     NaN        NaN        NaN                2017  181.0  12.929        NaN        NaN                2018  280.6  17.538      181.0     12.929Danielle Hunter 2016  204.6  12.788        NaN        NaN                2017    NaN     NaN      204.6     12.788                2018  237.6  14.850        NaN        NaNJ.J. Watt       2016    NaN     NaN        NaN        NaN                2017    NaN     NaN        NaN        NaN                2018  259.8  16.238        NaN        NaN
随时随地看视频慕课网APP

相关分类

Python
我要回答