如何DataFrame.groupby包含列表变量的字段

时间:2015-02-19 15:55:59

标签: python list pandas grouping

我有一个这样的数据框

import pandas as pd
df = pd.DataFrame({'key1':pd.Series(data = ['a','b','c','d'], index = [0,1,2,3]), 'key2':pd.Series(data = [3,4,2,3],index = [0,1,2,3]), 'key3':pd.Series(data = [0.3,0.5,0.3,0.3],index = [0,1,2,3]), 'key4':pd.Series(data = [[1,2,3],[4,3,6],[1,2,3],[1,2]], index = [0,1,2,3])})

我想这样做:

df.groupby('key4').describe()

但是它给出了一个错误。

我的目的是在key4中创建具有相似值的组

2 个答案:

答案 0 :(得分:1)

您不能通过任何包含不可用类型的列进行groupby,列表就是其中之一,例如,如果您df.groupby('key4').head()生成了错误:

  

TypeError:不可用类型:'list'

如果您将元组作为数据,那么您可以对该列进行分组,您可以通过执行以下操作进行转换:

在[454]中:

df['key4'] = df['key4'].apply(lambda x: tuple(x))
df
Out[454]:
  key1  key2  key3       key4
0    a     3   0.3  (1, 2, 3)
1    b     4   0.5  (4, 3, 6)
2    c     2   0.3  (1, 2, 3)
3    d     3   0.3     (1, 2)

然后,您可以将该列调用describe分组:

In [455]:

df.groupby('key4').describe()
Out[455]:
                     key2  key3
key4                           
(1, 2)    count  1.000000   1.0
          mean   3.000000   0.3
          std         NaN   NaN
          min    3.000000   0.3
          25%    3.000000   0.3
          50%    3.000000   0.3
          75%    3.000000   0.3
          max    3.000000   0.3
(1, 2, 3) count  2.000000   2.0
          mean   2.500000   0.3
          std    0.707107   0.0
          min    2.000000   0.3
          25%    2.250000   0.3
          50%    2.500000   0.3
          75%    2.750000   0.3
          max    3.000000   0.3
(4, 3, 6) count  1.000000   1.0
          mean   4.000000   0.5
          std         NaN   NaN
          min    4.000000   0.5
          25%    4.000000   0.5
          50%    4.000000   0.5
          75%    4.000000   0.5
          max    4.000000   0.5

答案 1 :(得分:0)

您可以先将该列转换为字符串,然后对其进行描述:

df.groupby(df.key4.astype(str)).describe()