Python 熊猫:当列值为DICT时,如何按列值分组?

Python 熊猫:当列值为DICT时,如何按列值分组?,python,pandas,grouping,Python,Pandas,Grouping,我正在做一个练习,其中当前的要求是“找到前10个主要项目主题(使用“mjtheme_名称代码”列)” 我的第一个想法是按进行分组,然后对分组进行计数和排序 但是,此列中的值是DICT列表,例如 [{'code': '1', 'name': 'Economic management'}, {'code': '6', 'name': 'Social protection and risk management'}] 我不能(显然)将这些分组,至少不能使用groupby。我犯了一个错误 TypeE

我正在做一个练习,其中当前的要求是“找到前10个主要项目主题(使用“mjtheme_名称代码”列)”

我的第一个想法是按进行分组,然后对分组进行计数和排序

但是,此列中的值是DICT列表,例如

[{'code': '1', 'name': 'Economic management'},
 {'code': '6', 'name': 'Social protection and risk management'}]
我不能(显然)将这些分组,至少不能使用
groupby
。我犯了一个错误

TypeError:不可损坏的类型:“列表”

有把戏吗?我在猜测一些类似的事情

(我可以按另一列进行分组,该列具有字符串值,并与该列匹配1:1,但练习是特定的。)

df.head()

有两个步骤可以解决您的问题:

使用
pandas==0.25

  • 将dict列表展平
  • 在列中转换dict:
  • 步骤1

    df=df.explode('mjtheme\u namecode')
    
    步骤2

    df=df.join(pd.DataFrame(df['mjtheme\u namecode'].values.tolist())
    
    添加:如果dict有多个层次结构,您可以尝试使用
    json\u normalize

    从pandas.io.json导入json\u规范化
    df=df.join(json_normalize(df['mjtheme_namecode'].values.tolist())
    
    这里唯一的问题是pd.explode将复制所有其他列(如果这是一个问题)

    使用样本数据

    x=[
    [1,2,[{'a':1,'b':3},{'a':2,'b':4}],,
    [1,3,[{'a':5,'b':6},{'a':7,'b':8}]
    ]
    df=pd.DataFrame(x,列=['col1','col2','col3'])
    出[1]:
    col1 col2 col3
    0 1 2[{'a':1,'b':3},{'a':2,'b':4}]
    13[{'a':5,'b':6},{'a':7,'b':8}]
    ##第一步
    df.explode('col3')
    出[2]:
    col1 col2 col3
    0 1 2{'a':1,'b':3}
    0 1 2{'a':2'b':4}
    1113{'a':5'b':6}
    1113{'a':7'b':8}
    ##步骤2
    df=df.join(pd.DataFrame(df['col3'].values.tolist())
    出[3]:
    col1 col2 col3 a b
    0 1 2{'a':1,'b':3}1 3
    0 1 2{'a':2'b':4}1 3
    1 13{'a':5,'b':6}2 4
    1 13{'a':7,'b':8}2 4
    ##现在,您可以使用新变量进行分组
    
    您是否能够显示示例输出?通常,您会将dict/json传递到另一个数据帧以对其进行扩展。可能会重复