如何以json作为值在熊猫中分组?

时间:2019-02-12 06:36:16

标签: python pandas dataframe

我的熊猫DataFrame数据:

     dat1 dat2 dat3
0    1    1    [{"gid": 1, "bs": "2", "_cc": "1"}]
1    1    1    [{"gid": 1, "bs": "2", "_cc": "1"}]
2    2    3    [{"gid": 3, "bs": "5", "_cc": "1"}]

我需要对dat1列进行分组,我的预期输出应该是:

     dat1 dat2 dat3
0    1    1    [{"gid": 1, "bs": "2", "_cc": "1"}]
1    2    3    [{"gid": 3, "bs": "5", "_cc": "1"}]

我使用了pandas数据框,如下所示:

data = dataframedata   #dataframe data 
(out['dat1','dat2','dat3']).groupby([ 'dat1','dat2','dat3']).size().reset_index()

我得到keyerror at dat3,请引导我提前找到解决方案。

1 个答案:

答案 0 :(得分:1)

问题是list不可散列,因此需要将它们转换为字符串:

data = df[~df['dat3'].astype(str).duplicated()] 
print (data)
   dat1  dat2                                 dat3
0     1     1  [{'gid': 1, 'bs': '2', '_cc': '1'}]
2     2     3  [{'gid': 3, 'bs': '5', '_cc': '1'}]

如果要删除多列重复项:

data = df[~df.assign(dat3= df['dat3'].astype(str)).duplicated(['dat1','dat2','dat3'])] 
print (data)
   dat1  dat2                                 dat3
0     1     1  [{'gid': 1, 'bs': '2', '_cc': '1'}]
2     2     3  [{'gid': 3, 'bs': '5', '_cc': '1'}]