对包含JSON列的DataFrame进行分组
我想在一个数据表中去掉重复的记录,方法是通过分组来处理这些值。我的数据结构大概是这样的:
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...