首页 > 解决方案 > Pandas - 在 groupby() 和 sum() 之后产生 JSON 响应

问题描述

这是我的数据框

                                        Candidate Name  Score
0  04cb11ef8edf16e46a21741d8f41a2a4e5b87309938835...      0
1  04cb11ef8edf16e46a21741d8f41a2a4e5b87309938835...      3
2  04cb11ef8edf16e46a21741d8f41a2a4e5b87309938835...      4
0  092c7c810ede0567b8e23322f47dd2e00e99e573d03292...      0
0  5ec10b8c7f6de34b171d9eaf2feb3eb8259e885c9ec1ce...      3
0  9e9bd06cafe352be143b9ad048b502f2c705344a8317b2...      3
1  9e9bd06cafe352be143b9ad048b502f2c705344a8317b2...      4
2  9e9bd06cafe352be143b9ad048b502f2c705344a8317b2...      0
3  9e9bd06cafe352be143b9ad048b502f2c705344a8317b2...      0
0  a75af89c99cfa13a005a73fca54b2d47fe4721a61f33cc...      0
0  a828b55bf32197c6777ad2279d24c3a381f9cdfa2b83d5...      0
0  ab94b93874d3f259dd959233f9bc96216987c0059d52a3...      0
0  b37d73fa1edf8a54dc5026935c6779baedc870897cf286...      0
0  c1e3852952eacca7805fa35fc4d0878a2de95c45cf58f9...      0
0  c5d504030146fcc7d54dfc022c5b4cbf825f5fa5b1cd69...      0
0  c319b89c6ab27ee32dad62ce6f7f1704c3f143407f918a...      0
0  da8f8bd172979e343bda34213dc94d14745433a17f0e4f...      0
0  f8949169525d585e35ac14561321c4746cff6dc9a3ac3f...      0

问题是我想在完成后获得总分groupby()sum()但我不确定一旦我这样做会变成 JSON 响应,因为之后的数据帧不会加起来......

总分将取代分数栏。公式总分是 13 的除数并转换为百分比。假设得分为 3。总得分为 3/13 * 100 = 23.0769230769

df = df.groupby(['Candidate Name'])['Score'].sum()

Candidate Name
04cb11ef8edf16e46a21741d8f41a2a4e5b873099388352c18fc168933111256    7
092c7c810ede0567b8e23322f47dd2e00e99e573d0329236b293dff49402fd1d    0
5ec10b8c7f6de34b171d9eaf2feb3eb8259e885c9ec1ceffb937d3ec69bd48b6    3
9e9bd06cafe352be143b9ad048b502f2c705344a8317b260e26dc7641018b735    7
a75af89c99cfa13a005a73fca54b2d47fe4721a61f33cc9e419e99de88d45bd1    0
a828b55bf32197c6777ad2279d24c3a381f9cdfa2b83d5631035cd20f058f0a1    0
ab94b93874d3f259dd959233f9bc96216987c0059d52a33e96cc85e6717b6d93    0
b37d73fa1edf8a54dc5026935c6779baedc870897cf286379c7d49a55371328c    0
c1e3852952eacca7805fa35fc4d0878a2de95c45cf58f994480877eb80074b23    0
c319b89c6ab27ee32dad62ce6f7f1704c3f143407f918a0327eb967236849d04    0
c5d504030146fcc7d54dfc022c5b4cbf825f5fa5b1cd69c9cccd10490f05e5c1    0
da8f8bd172979e343bda34213dc94d14745433a17f0e4f749ea5b91faf02a939    0
f8949169525d585e35ac14561321c4746cff6dc9a3ac3f4ce1b8d7e45d3177d4    0
Name: Score, dtype: int64

示例 JSON 如下所示

{"Mobile_Application_Developer": {"04cb11ef8edf16e46a21741d8f41a2a4e5b873099388352c18fc168933111256": 53.8461538462, "5ec10b8c7f6de34b171d9eaf2feb3eb8259e885c9ec1ceffb937d3ec69bd48b6": 23.0769230769}}

Mobile_Application_Developer检索总分后需要插入值。

标签: pythonjsonpandas

解决方案


在第一步中将值除以13和乘以,然后转换为字典:100

d = df.groupby(['Candidate Name'])['Score'].sum().div(13).mul(100).to_dict()
print (d)

{'04cb11ef8edf16e46a21741d8f41a2a4e5b87309938835...': 53.84615384615385, '092c7c810ede0567b8e23322f47dd2e00e99e573d03292...': 0.0, '5ec10b8c7f6de34b171d9eaf2feb3eb8259e885c9ec1ce...': 23.076923076923077, '9e9bd06cafe352be143b9ad048b502f2c705344a8317b2...': 53.84615384615385, 'a75af89c99cfa13a005a73fca54b2d47fe4721a61f33cc...': 0.0, 'a828b55bf32197c6777ad2279d24c3a381f9cdfa2b83d5...': 0.0, 'ab94b93874d3f259dd959233f9bc96216987c0059d52a3...': 0.0, 'b37d73fa1edf8a54dc5026935c6779baedc870897cf286...': 0.0, 'c1e3852952eacca7805fa35fc4d0878a2de95c45cf58f9...': 0.0, 'c319b89c6ab27ee32dad62ce6f7f1704c3f143407f918a...': 0.0, 'c5d504030146fcc7d54dfc022c5b4cbf825f5fa5b1cd69...': 0.0, 'da8f8bd172979e343bda34213dc94d14745433a17f0e4f...': 0.0, 'f8949169525d585e35ac14561321c4746cff6dc9a3ac3f...': 0.0}

然后添加dict的外层并转换为json:

import json

json = json.dumps({"Mobile_Application_Developer":d})

推荐阅读