gpt4 book ai didi

python - Groupby 以及 value_counts 的工作原理

转载 作者:行者123 更新时间:2023-12-01 09:14:55 27 4
gpt4 key购买 nike

我有一个包含以下数据的数据框

     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

我所做的是按本地列进行分组,然后我打算获取 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?

最佳答案

您正在寻找'size'。对于常用函数,您应该相信字符串已映射到有效的算法。例如:

d = {'media': 'mean', 'contador': 'size'}
res = homedata.groupby('local')['r1'].agg(d)
<小时/>

I would expect a column of integers in 'contador'.

这不是你所期望的。首先请注意pd.Series.value_counts返回计数的 pd.Series 对象,而不是整数。目前尚不清楚您期望此方法返回什么整数。

某些值是整数而其他值是列表的原因表明 groupby 正在执行某种转换:它假设如果 value_counts 返回一系列长度为 1 的值,则您只感兴趣在该系列的第一个值中。

为了说明这一点,让我们看一个您所看到的最小示例:

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

关于python - Groupby 以及 value_counts 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com