groupby在大熊猫中转移

时间:2015-09-18 22:07:25

标签: python pandas

我该怎么做:

 year artist           genre    genre_sales
 1999      A        Pop/Rock             10
 1999      B        Hip/Hop              15
 1999      C        Country               8            
 2000      A        Pop/Rock             11
 2000      B        Hip/Hop              14
 2000      D        Jazz                  1
 2001      B        Hip/Hop              18
 2001      C        Country              10

进入这个:

 year artist           genre    genre_sales
 1999      A        Pop/Rock            Nan 
 1999      B        Hip/Hop             Nan
 1999      C        Country             Nan
 2000      A        Pop/Rock             10
 2000      B        Hip/Hop              15
 2000      D        Jazz            (1999 Jazz sales despite D not releasing in '99)
 2001      B        Hip/Hop              14
 2001      C        Country         (2000 country values, not the 8 from '99)

我看到了groupby-shift问题和食谱页面,并假设我可以做类似的事情:

df.groupby(['year','artist'])['genre_sales'].shift(1)

df.groupby(['year','genre','artist'])['genre_sales'].shift(1)

但我认为只有艺术家每年制作一张专辑才会有效。

Current'类型销售'是该年艺术家类型的年销售额。我试图获得上一年的“流派销售”#39;与每位艺术家连成一排。每个类型每年都会有多位艺术家,每个艺术家在某一年内可以在该流派中有零个或多个条目。

1 个答案:

答案 0 :(得分:1)

另一种方法是使用groupby-apply组合

创建一个应用于每个段的函数,并添加一个新列,该列是目标列移位的:

def shiftCol(grp, newCol, col):
    grp[newCol] = grp[col].shift()
    return grp

然后只需调用该函数,指定要移位的列的名称

df.groupby(['artist']).apply(shiftCol, newCol = 'prev_genre_sales',col = 'genre_sales')