Pandas数据框数组列中的Groupby值

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

   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: unhashable type: 'list'

我想得到这样的输出:

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

任何帮助将不胜感激!

回答

尝试explode+ value_counts

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

可选sort_index用于在 OP 中排序:

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

或者使用natsorted正确的自然字母数字排序:

from natsort import natsorted

df['arraylist'].explode().value_counts().loc[lambda s: natsorted(s.index)]

使用的数据帧和导入:

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)


以上是Pandas数据框数组列中的Groupby值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>