我有一个如下所示的数据框:
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/