在Python中,根据数据帧计算组_中的上一个值的百分比

2024-05-19 03:04:02 发布

您现在位置:Python中文网/ 问答频道 /正文

更新帖子:

我想根据组中以前的值计算百分比

这是我的玩具数据集(已更新):

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。我想

enter image description here 有什么见解吗

为了更全面,我还做了一个自定义排序,这样第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)

谢谢


Tags: testdfdatadatepagepage1c2cid
1条回答
网友
1楼 · 发布于 2024-05-19 03:04:02

您的示例数据与您在图像中显示的数据不太匹配,但我认为您想要的是groupbycampaignsetdate,然后将组中的所有内容除以组的第一个值:

In [138]: data_grouped_df['percentage'] = data_grouped_df.groupby(level=[0,1]).apply(lambda x: x/x.iloc[0] * 100)['cid']

In [139]: data_grouped_df
Out[139]:
                          cid  percentage
campaignset date page
c1          1    page1      1       100.0
                 page2      1       100.0
            2    page1      1       100.0
                 page3      1       100.0
                 page5      1       100.0
            3    page6      1       100.0
            4    page7      1       100.0
c2          2    page2      1       100.0
                 page3      1       100.0
                 page4      2       200.0
            4    page 10    1       100.0
                 page8      1       100.0
                 page9      1       100.0

相关问题 更多 >

    热门问题