我该怎么做:
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;与每位艺术家连成一排。每个类型每年都会有多位艺术家,每个艺术家在某一年内可以在该流派中有零个或多个条目。
答案 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')