如何 DataFrame.groupby 包含列表变量的字段
How to DataFrame.groupby a field containing list variables
我有一个这样的数据框
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 中具有相似值的组
您可以先将该列转换为字符串,然后对其进行描述:
df.groupby(df.key4.astype(str)).describe()
您不能按任何包含不可散列类型的列分组,列表就是其中之一,例如,如果您这样做 df.groupby('key4').head()
会产生错误:
TypeError: unhashable type: '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
我有一个这样的数据框
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 中具有相似值的组
您可以先将该列转换为字符串,然后对其进行描述:
df.groupby(df.key4.astype(str)).describe()
您不能按任何包含不可散列类型的列分组,列表就是其中之一,例如,如果您这样做 df.groupby('key4').head()
会产生错误:
TypeError: unhashable type: '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