对包含JSON列的DataFrame进行分组

2 投票
1 回答
34 浏览
提问于 2025-04-14 17:28

我想在一个数据表中去掉重复的记录,方法是通过分组来处理这些值。我的数据结构大概是这样的:

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字符串']

我通常会这样做:

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)

那么,这样做真的是最好的方法吗?我总觉得应该还有更好的办法。

有什么建议吗?

1 个回答

0

你的方法很好,也很合理,但你可以用更有效率的方式来做:

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...

撰写回答