pandas计算一个维度中的所有数值占总价值的占比

比如我有一份票房数据:

类型票房
剧情, 灾难2913118
战争, 历史3094524
剧情, 喜剧3099961
剧情3176119

根据已知的票房信息,我想知道不同类型的片子能抢占多少比例的总票房,效果如下:
在这里插入图片描述

import pandas as pd


def split_and_sum(dataframe: pd.DataFrame, column: str, sum_column: str):
    def get_all_type(type_se):
        """获得全部的类型"""
        type_info = type_se[column]
        type_list = type_info.split(',')
        for i in type_list:
            if i in all_data.index:
                all_data.loc[i, 0] += type_se[sum_column]
            else:
                all_data.loc[i] = type_se[sum_column]

    def set_value(type_se):
        """为对应的类型赋值"""
        type_info = type_se[column]
        type_list = type_info.split(',')
        type_value = 0.0
        for i in type_list:
            type_value += data_dict[i]
        return type_value

    all_data: pd.DataFrame = pd.DataFrame([['test']], index=['test'])
    dataframe.apply(get_all_type, axis=1)
    all_data.drop('test', inplace=True)  # 删除第一行
    all_data.loc[:, 0] = all_data.loc[:, 0] / all_data.loc[:, 0].sum()  # 计算比值
    data_dict = all_data.to_dict()[0]
    series = dataframe.apply(set_value, axis=1)
    return series


if __name__ == '__main__':
    df: pd.DataFrame = pd.DataFrame([
        ['剧情, 灾难', 2913118, ],
        ['战争, 历史', 3094524, ],
        ['剧情, 喜剧', 3099961, ],
        ['剧情,', 3176119, ],
    ], columns=['type', 'box_office'])

    df['type_value'] = split_and_sum(df, 'type', 'box_office')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值