我希望通过对值进行分组来消除数据帧中的重复记录.我的数据 struct 如下:

json = {
    "employees": [
        {"name": "Shyam", "email": "shyamjaiswal@gmail.com"},
        {"name": "Bob", "email": "bob32@gmail.com"},
        {"name": "Jai", "email": "jai87@gmail.com"},
    ]
}
df = pd.DataFrame({"key": ["A", "A"], "val": [1, 2], "json": [json, json]})

我想要的是单行:['A', [1, 2], 'json string']

我通常会这样做:

df.groupby(["val", "json"])["key"].apply(list)

如果不是因为json数据:TypeError: unhashable type: 'dict',这将工作得很好.因此,我要做的是首先将列转换为字符串:

df["json"] = df["json"].apply(json.dumps)
df = df.groupby(["val", "json"])["key"].apply(list)

然后将该列转换回JSON:

df["json"] = df["json"].apply(json.loads)

现在,这真的是最好的办法吗?我不禁想,一定有更好的.

有什么提示吗?

推荐答案

你的方法很好很合理,但你可以更有效地做到这一点:

import pandas as pd
import json

json_data = {
    "employees": [
        {"name": "Shyam", "email": "shyamjaiswal@gmail.com"},
        {"name": "Bob", "email": "bob32@gmail.com"},
        {"name": "Jai", "email": "jai87@gmail.com"},
    ]
}
df = pd.DataFrame({"key": ["A", "A"], "val": [1, 2], "json": [json_data, json_data]})

df_grouped = df.groupby("key").agg({
    "val": list,
    "json": 'first'  
}).reset_index()

print(df_grouped)

这就是

 key     val                                               json
0   A  [1, 2]  {'employees': [{'name': 'Shyam', 'email': 'shy...

Python相关问答推荐

Python在tuple上操作不会通过整个单词匹配

Python上的Instagram API:缺少client_id参数"

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

Python中的嵌套Ruby哈希

加速Python循环

在pandas中使用group_by,但有条件

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

调用decorator返回原始函数的输出

合并帧,但不按合并键排序

使用Python和文件进行模糊输出

从Windows Python脚本在WSL上运行Linux应用程序

python中csv. Dictreader. fieldname的类型是什么?'

基于Scipy插值法的三次样条系数

Polars Group by描述扩展

Python 3试图访问在线程调用中实例化的类的对象

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'

如何在一组行中找到循环?

numpy数组和数组标量之间的不同行为

如何用FFT确定频变幅值

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间