gpt4 book ai didi

python - 如何计算 pandas 中分类变量的滚动计数

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:42 24 4
gpt4 key购买 nike

我正在尝试对数据帧进行滚动计数。我遇到的问题是指定条件,因为它是字符串,而不是整数。下面的数据框是一个片段,以及一个字典的片段。

    GameID  Event
0 100 NaN
1 100 NaN
2 100 Ben
3 100 NaN
4 100 Steve
5 100 Ben
6 100 NaN
7 100 Steve
8 100 NaN
9 100 NaN
10 101 NaN
11 101 NaN
12 101 Joe
13 101 NaN
14 101 Will
15 101 Joe
16 101 NaN
17 101 Will
18 101 NaN
19 101 NaN



gamedic = {'100':['Ben','Steve'], '101':['Joe','Will']}

最终,我希望数据框如下所示。在本示例中,我将列命名为“Ben”和“Steve”,但实际上它们将是“First”和“Second”,与它们在字典中的位置相对应。

    GameID  Event  Ben  Steve
0 100 NaN 0 0
1 100 NaN 0 0
2 100 Ben 0 0
3 100 NaN 1 0
4 100 Steve 1 0
5 100 Ben 1 1
6 100 NaN 2 1
7 100 Steve 2 1
8 100 NaN 2 2
9 100 NaN 2 2
10 101 NaN 0 0
11 101 NaN 0 0
12 101 Joe 0 0
13 101 NaN 1 0
14 101 Will 1 0
15 101 Joe 1 1
16 101 NaN 2 1
17 101 Will 2 1
18 101 NaN 2 2
19 101 NaN 2 2


pd.rolling_count(df.Event, 1000,0).shift(1)
ValueError: could not convert string to float: Steve

我不确定这是否是一个复杂的问题,或者我是否遗漏了 pandas 中明显的东西。整个弦乐的概念让我很难开始。

最佳答案

首先,您想使用字典获取仅包含“first”和“second”的列。我想不出一个聪明的方法来做到这一点,所以让我们迭代行:

import numpy as np
df['Winner'] = np.nan
for i,row in df.iterrows():
if row.Event == gamedic[row.GameID][0]:
df['Winner'].ix[i] = 'First'
if row.Event == gamedic[row.GameID][1]:
df['Winner'].ix[i] = 'Second'

您可以使用pd.get_dummies将字符串列(代表分类变量)转换为指示变量;在你的情况下,这会给你

pd.get_dummies(df.Winner)
Out[46]:
First Second
0 0 0
1 0 0
2 1 0
3 0 0
4 0 1
5 1 0
6 0 0
7 0 1
8 0 0
9 0 0
10 0 0
11 0 0
12 1 0
13 0 0
14 0 1
15 1 0
16 0 0
17 0 1
18 0 0
19 0 0

您可以使用 pd.concat 将它们添加到原始数据框中:

df = pd.concat([df,pd.get_dummies(df.Winner)],axis=1)

然后您可以使用 groupby.cumsum 获得累计总和,如 @Brian 的回答

df.groupby('GameID').cumsum()
Out[60]:
First Second
0 0 0
1 0 0
2 1 0
3 1 0
4 1 1
5 2 1
6 2 1
7 2 2
8 2 2
9 2 2
10 0 0
11 0 0
12 1 0
13 1 0
14 1 1
15 2 1
16 2 1
17 2 2
18 2 2
19 2 2

关于python - 如何计算 pandas 中分类变量的滚动计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465143/

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