所以基本上,我看的是一些音乐流行度排行榜的数据。所以我可以看到一首歌在排行榜上有多少周,它的位置是什么,它是哪周的位置,以及歌曲的名字和歌手。
我已经将排行榜分开,只包含在某一时刻成为排行榜第一的歌曲的条目,并希望看到每首歌到十年排行榜第一的平均“旅程”。
当然,其中一些歌曲在排行榜前100名上花费的时间更多。因此,虽然简单地平均歌曲所占的每个位置似乎很容易,但要做到这一点却并非易事。
我想过当一首歌退出前100名时,我会添加一些虚拟变量,比如101,等于任何曲目在排行榜上花费的最大周数的长度。但这似乎最终会扭曲我的数据。
我的数据看起来像这样(除了有多首曲目,当然这首歌还有更多的条目:
发布于 2019-09-01 03:17:50
如果我理解正确,我的解决方案如下:
首先,您可以按歌曲对数据帧进行分组,并将数字作为字符串添加到字符串中。
new_df=pd.DataFrame(df.groupby('Song')['Position'].apply(lambda x:' '.join(x.astype(str))))它将返回如下内容:
Position
Song
Radioactive 93 98 45 56 45 45 45 1 4 67 89然后我把字符串拆分为"1",我取第一个元素,再加上数字“1”。
new_df['Position']=new_df['Position'].apply(lambda x:x.split('1')[0]+'1')
print(new_df)
Position
Song
Radioactive 93 98 45 56 45 45 45 1在那之后,我可以把它变成一个用空格拆分的列表,然后我可以取这个列表的平均值:
new_df['Position'].apply(lambda x: np.mean([int(i) for i in x.split()]))
print(new_df)
Song
Radioactive 53.5https://stackoverflow.com/questions/57740555
复制相似问题