python - 如何对 pandas 数据框中的列表进行分组

标签 python python-2.7 pandas group-by

我有一个如下所示的数据框:

df = pd.DataFrame({'col1': [['a','b','c'], ['a','d'], ['c','c' ]]})

我想对数据框进行分组,使其看起来像这样:

result = pd.DataFrame({'col1': [['a'], ['b'], ['c'], ['d']], 'count': [[2],[1],[3],[4]]})

如果我在 python 中使用 pd.groupby('col1').count() 选项,则会收到错误

"Unhashable type: 'list'.

如何解决这个问题?

最佳答案

您需要通过 DataFrame 构造函数展平列表,通过 stack 创建 Series最后value_counts :

df1 = pd.DataFrame(df['col1'].values.tolist()).stack().value_counts().reset_index()
df1.columns = ['col1','count']
df1 = df1.sort_values('col1')
print (df1)
  col1  count
1    a      2
2    b      1
0    c      3
3    d      1

如果真的想要列表(某些 pandas 函数可能会失败)添加 applymap :

df1 = df1.applymap(lambda x: [x])
print (df1)
  col1 count
1  [a]   [2]
2  [b]   [1]
0  [c]   [3]
3  [d]   [1]

另一个解决方案 Counter + numpy.concatenate :

from collections import Counter

df1 = pd.Series(Counter(np.concatenate(df['col1']))).reset_index()
df1.columns = ['col1','count']
df1 = df1.applymap(lambda x: [x])
print (df1)
  col1 count
0  [a]   [2]
1  [b]   [1]
2  [c]   [3]
3  [d]   [1]

关于python - 如何对 pandas 数据框中的列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43999270/

相关文章:

javascript - 如何在谷歌浏览器中从 HTML 运行 python 脚本?

python - Moviepy 滑入和滑出过渡

python - 使用一个递归调用实现递归

python - 如何为 "IN clause"传递可变参数

python - 循环从一个数据帧在 matplotlib 中创建多个图形?

python - 如何找到两个 Django 查询集的联合?

Python:如果 abc 在 j ['category' ]

python - 保龄球调度程序

python - 如何用最常见的值替换 pandas 列的值

python - 如何根据其他列向 Pandas 数据框添加新行?