import pandas as pd
if __name__ == '__main__':
df = pd.DataFrame([{"业务员ID": "A", "险种": "安全生产责任保险(B)", "是否续保": "否", "保费": 8867.93, "件数": 4},
{"业务员ID": "A", "险种": "安全生产责任保险(B)", "是否续保": "是", "保费": 1067.93, "件数": 8},
{"业务员ID": "B", "险种": "安全生产责任保险(B)", "是否续保": "否", "保费": 2547.17, "件数": 6},
{"业务员ID": "B", "险种": "安全生产责任保险(B)", "是否续保": "是", "保费": 9865.17, "件数": 3},
{"业务员ID": "C", "险种": "食品安全责任保险", "是否续保": "是", "保费": 2377.36, "件数": 8},
{"业务员ID": "D", "险种": "安全生产责任保险(B)", "是否续保": "否", "保费": 2452.84, "件数": 20},
{"业务员ID": "E", "险种": "个人责任保险", "是否续保": "否", "保费": 118.68, "件数": 1},
{"业务员ID": "F", "险种": "安全生产责任保险(B)", "是否续保": "否", "保费": 52641.54, "件数": 2},
{"业务员ID": "G", "险种": "个人责任保险", "是否续保": "否", "保费": 26.22, "件数": 9}])
result = []
for key, itemGroup in df.groupby(['业务员ID', '险种']):
feeTotal = itemGroup['保费'].sum()
numTotal = itemGroup['件数'].sum()
itemGroup['业务员ID'] = key[0]
itemGroup['险种'] = key[1]
itemGroup['保费占比'] = round(100 * itemGroup['保费'] / feeTotal, 2).apply(lambda x: str(x) + "%")
itemGroup['件数占比'] = round(100 * itemGroup['件数'] / numTotal, 2).apply(lambda x: str(x) + "%")
result.append(itemGroup)
resultDf = pd.concat(result)
print(resultDf)
原始数据:

结果:
