更新帖子:
我想根据组中以前的值计算百分比
这是我的玩具数据集(已更新):
data_test= {'date':[1,1,1,1, 2,2,2,2,2,2,2, 3,3, 4, 4, 4, 4,4,4,4,4,4 ],
'cid':[99, 99, 100, 99, 99,100,100,99,99,100,100,99,99 , 99,101, 102, 105, 107, 100,99, 100, 100],
'page':['page1', 'page2', 'page1', 'page2','page1', 'page2', 'page3', 'page4', 'page5', 'page3', 'page4',
'page6', 'page6', 'page7' ,'page8','page8', 'page8', 'page8', 'page8' ,'page9', 'page9' ,'page10'],
'campaignset': ['c1','c1','c1','c1', 'c1', 'c2','c2','c2','c1','c1','c2', 'c1', 'c1', 'c1',
'c2', 'c2', 'c2','c2', 'c2', 'c2','c2','c2']}
data_test_df = pd.DataFrame(data_test)
data_drop_dups = data_test_df.drop_duplicates(['campaignset', 'date', 'page', 'cid'])
data_grouped = data_drop_dups.groupby(['campaignset', 'date', 'page']).cid.size()
data_grouped_df = pd.DataFrame(data_grouped)
这几乎让我达到了目的:
data_grouped_df['percentage'] = data_grouped_df.groupby(level=[0,1]).apply(lambda x: x/x.iloc[0] * 100)['cid']
data_grouped_df
但我在第一页中得到了活动集第一天的百分比>;当cid>;1.
500应该是100。下面的单元格应该是2/5*100,后面的单元格应该是1/5*100
我认为x/x.iloc[0]不起作用。它只是执行x.iloc[0]*100。我想
为了更全面,我还做了一个自定义排序,这样第10页就可以放在底部。这部分是有效的
sortlist = ['page1', 'page2', 'page3', 'page4', 'page5', 'page6', 'page7', 'page8', 'page9', 'page10']
data_grouped_df = data_grouped_df.reset_index()
data_grouped_df['page'] = pd.Categorical(data_grouped_df['page'],categories=sortlist)
data_grouped_df_2 = data_grouped_df.sort_values(['campaignset','date','page'])
print(data_grouped_df_2)
谢谢
您的示例数据与您在图像中显示的数据不太匹配,但我认为您想要的是
groupby
campaignset
和date
,然后将组中的所有内容除以组的第一个值:相关问题 更多 >
编程相关推荐