Python 熊猫:当列值为DICT时,如何按列值分组?
我正在做一个练习,其中当前的要求是“找到前10个主要项目主题(使用“mjtheme_名称代码”列)” 我的第一个想法是按进行分组,然后对分组进行计数和排序 但是,此列中的值是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
[{'code': '1', 'name': 'Economic management'},
{'code': '6', 'name': 'Social protection and risk management'}]
我不能(显然)将这些分组,至少不能使用groupby
。我犯了一个错误
TypeError:不可损坏的类型:“列表”
有把戏吗?我在猜测一些类似的事情
(我可以按另一列进行分组,该列具有字符串值,并与该列匹配1:1,但练习是特定的。)
df.head()
有两个步骤可以解决您的问题: 使用
pandas==0.25
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传递到另一个数据帧以对其进行扩展。可能会重复