我有一个包含以下数据的数据框
idpresm teamid competicion fecha local \
0 12345 dummy1 ECU D1 2018-07-07 Deportivo Cuenca
1 12345 dummy1 ECU D1 2018-07-03 Liga Dep. Universitaria Quito
2 12345 dummy1 ECU D1 2018-06-24 Universidad Catolica
3 12345 dummy1 ECU D1 2018-06-18 Club Sport Emelec
4 12345 dummy1 ECU D1 2018-06-12 Universidad Catolica
5 12345 dummy1 ECU D1 2018-06-05 Delfin SC
6 12345 dummy1 ECU D1 2018-05-31 Sociedad Deportiva Aucas
7 12345 dummy1 ECU D1 2018-05-26 Universidad Catolica
8 12345 dummy1 ECU D1 2018-05-12 Universidad Catolica
9 12345 dummy1 ECU D1 2018-05-05 Macara
10 12345 dummy1 ECU D1 2018-04-28 Universidad Catolica
11 12345 dummy1 ECU D1 2018-04-21 Guayaquil City
12 12345 dummy1 ECU D1 2018-04-14 Universidad Catolica
13 12345 dummy1 ECU D1 2018-04-07 CD El Nacional
14 12345 dummy1 ECU D1 2018-03-31 Universidad Catolica
15 12345 dummy1 ECU D1 2018-03-25 Independiente Jose Teran
16 12345 dummy1 ECU D1 2018-03-20 Universidad Catolica
17 12345 dummy1 ECU D1 2018-03-10 Tecnico Universitario
18 12345 dummy1 INT CF 2018-03-09 Colchagua CD
19 12345 dummy1 ECU D1 2018-03-04 Universidad Catolica
aw homeha line awayha r1 r3
0 2.39 0.96 0 0.80 1 1
1 3.79 0.85 0.5 0.91 2 1
2 9.32 1.00 1.5 0.84 4 0
3 5.80 0.99 1 0.85 2 3
4 2.93 0.85 0/0.5 0.97 1 1
5 3.86 1.04 0.5 0.80 5 2
6 2.61 0.85 0 0.99 0 1
7 3.32 1.04 0/0.5 0.80 1 1
8 5.56 0.90 1 0.94 2 1
9 2.82 0.70 0 1.16 1 2
10 3.60 1.00 0.5 0.84 3 1
11 2.20 1.04 0 0.80 1 1
12 4.07 0.99 0.5 0.85 2 0
13 2.77 0.97 0/0.5 0.85 0 0
14 3.36 0.80 0.5 1.02 3 1
15 6.11 0.97 0.5 0.85 2 1
16 2.03 0.91 0/-0.5 0.85 2 0
17 2.21 0.70 0/-0.5 1.13 0 2
18 1.44 NaN NaN NaN 0 0
19 2.76 0.80 0 1.02 1 2
我要做的是按本地列gruopby
,然后我打算获取列r1的平均值,为此,我执行以下操作
homedata.groupby('local')['r1'].agg({'media':np.average,'contador': lambda x: x.value_counts()})
我希望在'contador'中有一列整数。我得到的是这个
media contador
local
CD El Nacional 0.000000 1
Club Sport Emelec 2.000000 1
Colchagua CD 0.000000 1
Delfin SC 5.000000 1
Deportivo Cuenca 1.000000 1
Guayaquil City 1.000000 1
Independiente Jose Teran 2.000000 1
Liga Dep. Universitaria Quito 2.000000 1
Macara 1.000000 1
Sociedad Deportiva Aucas 0.000000 1
Tecnico Universitario 0.000000 1
Universidad Catolica 2.111111 [3, 3, 2, 1]
为什么我得到一个列表而不是9?
答案 0 :(得分:1)
您正在寻找'size'
。对于常见功能,您应该将信任字符串映射到高效算法。例如:
d = {'media': 'mean', 'contador': 'size'}
res = homedata.groupby('local')['r1'].agg(d)
我希望在'contador'中有一列整数。
这不是您应该期望的。首先请注意,pd.Series.value_counts
返回一个pd.Series
个计数对象,而不是整数。目前尚不清楚您期望该方法返回什么整数。
某些值是整数而另一些值是列表的原因表明groupby
正在执行某种转换:它假设如果value_counts
返回一系列长度为1的数据,则您仅对该值的第一个值感兴趣系列。
为了说明,让我们看一下您所看到的 minimum 例子:
import pandas as pd
df = pd.DataFrame([['A', 1], ['B', 2], ['B', 2], ['C', 4],
['B', 2], ['B', 6]], columns=['Group', 'Value'])
res = df.groupby('Group')['Value'].agg({'counts': lambda x: x.value_counts()})
print(res)
counts
Group
A 1
B [3, 1]
C 1