数据帧数组列中的Groupby值

2024-05-29 11:08:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框架,其中包含几个带有数组的列。以下是其中一列的示例:

   key            arraylist
0  PROJECT-13051  [value1, value2, value4]
1  PROJECT-13050  [value2, value3, value4]
2  PROJECT-13049  [value1, value2, value3]
3  PROJECT-13048  [value3, value4, value5]
4  PROJECT-13047  [value1, value2, value5]

我以逗号分隔的形式从sql数据库中提取这些数据,然后使用以下内容设置为列表:

df[arraylist] = df[arraylist].apply(literal_eval)

我希望按arraylist列分组,并获得数组中每个值的大小:

df.groupby('arraylist').size()

这将导致错误TypeError:unhabable类型:“list”

我希望得到如下输出:

arraylist
value1      3
value2      4
value3      3
value4      3
value5      2
dtype: int64

任何帮助都将不胜感激


Tags: 数据keyproject框架示例df数组形式
1条回答
网友
1楼 · 发布于 2024-05-29 11:08:38

尝试使用^{}+^{}

df['arraylist'].explode().value_counts()
value2    4
value1    3
value4    3
value3    3
value5    2
Name: arraylist, dtype: int64

可选的^{}用于按OP排序:

df['arraylist'].explode().value_counts().sort_index()
value1    3
value2    4
value3    3
value4    3
value5    2
Name: arraylist, dtype: int64

或使用^{}进行正确的自然字母数字排序:

from natsort import natsorted

df['arraylist'].explode().value_counts().loc[lambda s: natsorted(s.index)]
value1    3
value2    4
value3    3
value4    3
value5    2
Name: arraylist, dtype: int64

使用的数据帧和导入:

from ast import literal_eval

import pandas as pd

df = pd.DataFrame({
    'key': ['PROJECT-13051', 'PROJECT-13050', 'PROJECT-13049',
            'PROJECT-13048', 'PROJECT-13047'],
    'arraylist': ['["value1", "value2", "value4"]',
                  '["value2", "value3", "value4"]',
                  '["value1", "value2", "value3"]',
                  '["value3", "value14", "value5"]',
                  '["value1", "value2", "value5"]']
})
df['arraylist'] = df['arraylist'].apply(literal_eval)

相关问题 更多 >

    热门问题