gpt4 book ai didi

python - Pandas :当列值是字典时如何按列值分组?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:12 25 4
gpt4 key购买 nike

我正在做一个练习,当前的要求是“找到前 10 个主要项目主题(使用列‘mjtheme_namecode’)”。

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

但是,此列中的值是字典列表,例如

[{'code': '1', 'name': 'Economic management'},
{'code': '6', 'name': 'Social protection and risk management'}]

而且我不能(显然)对这些进行分组,至少不能使用 group_by。我收到一个错误。

TypeError: unhashable 类型: 'list'

有什么技巧吗?我在猜测类似 this question 的内容.

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

df.head() dataframe, 10 records

最佳答案

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

使用 pandas==0.25

  1. 展开字典列表
  2. 按列转换字典:

第一步

df = df.explode('mjtheme_namecode')

第 2 步

df = df.join(pd.DataFrame(df['mjtheme_namecode'].values.tolist())

新增:如果dict有多个层级,可以尝试使用json_normalize:

from pandas.io.json import json_normalize

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, columns=['col1','col2','col3'])

Out[1]:
col1 col2 col3
0 1 2 [{'a': 1, 'b': 3}, {'a': 2, 'b': 4}]
1 1 3 [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}]


## Step 1
df.explode('col3')
Out[2]:
col1 col2 col3
0 1 2 {'a': 1, 'b': 3}
0 1 2 {'a': 2, 'b': 4}
1 1 3 {'a': 5, 'b': 6}
1 1 3 {'a': 7, 'b': 8}

## Step 2
df = df.join(pd.DataFrame(df['col3'].values.tolist()))
Out[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 1 3 {'a': 5, 'b': 6} 2 4
1 1 3 {'a': 7, 'b': 8} 2 4

## Now you can group with the new variables

关于python - Pandas :当列值是字典时如何按列值分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57333768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com