累积条件计数

Posted

技术标签:

【中文标题】累积条件计数【英文标题】:Cumulative conditional count 【发布时间】:2019-07-03 03:42:36 【问题描述】:

我有以下数据框。

df = pd.DataFrame(
    
        "drive": [1,1,2,2,2,3,3,3,4,4,4,5,5,6,6,7,7],
        "team": ['home','home','away','away','away','home','home','home','away',
                 'away','away','home','home','away','away','home','home'],
        "home_comfy_lead": [0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1],
        "home_drives": [1,1,0,0,0,2,2,2,0,0,0,3,3,0,0,4,4],
        'home_drives_with_comfy_lead': [0,0,0,0,0,0,0,1,0,0,0,2,2,0,0,3,3]
    )

我正在尝试制作两列:

    一个 home_drives 列唯一地计算来自 drive 列基于来自 team 的“家”指定 列。

    一个 home_drives_with_comfy_lead 列唯一地计算 home_drives 的值基于 home_comfy_lead 是否为真。

我想要的输出是:

    drive  team  home_comfy_lead  home_drives  home_drives_with_comfy_lead
0       1  home                0            1                            0
1       1  home                0            1                            0
2       2  away                0            0                            0
3       2  away                0            0                            0
4       2  away                0            0                            0
5       3  home                0            2                            0
6       3  home                0            2                            0
7       3  home                1            2                            1
8       4  away                0            0                            0
9       4  away                0            0                            0
10      4  away                0            0                            0
11      5  home                1            3                            2
12      5  home                1            3                            2
13      6  away                0            0                            0
14      6  away                0            0                            0
15      7  home                1            4                            3
16      7  home                1            4                            3

有人可以帮忙吗?这几天我一直在为此苦苦挣扎。

【问题讨论】:

欢迎来到 SO。请花时间阅读 ***.com/help/how-to-ask。它将帮助您提出可靠的问题,希望得到有用的答案 你能告诉你到目前为止你尝试了什么吗? @orde,对不起。我的问题不够具体吗?在发布问题之前我确实阅读过,所以我希望它足够清楚。 @anishtain4 我尝试了 np.where、groupby 和 cumcount 的组合。我无法在 SO 上找到任何解决此问题的内容,所以这主要是在黑暗中拍摄。 【参考方案1】:

使用.where 屏蔽,然后使用groupby + ngroup。在这里,我们很幸运 NaN 组被分配了 -1 并且您还希望从 1 开始计数,因此添加 +1 同时修复了这两个问题。

df['home_drives'] = df.where(df.team == 'home').groupby('drive').ngroup()+1
df['hdwcl'] = df.where(df.home_comfy_lead == 1).groupby('home_drives').ngroup()+1

输出:

    drive  team  home_comfy_lead  home_drives  hdwcl
0       1  home                0            1      0
1       1  home                0            1      0
2       2  away                0            0      0
3       2  away                0            0      0
4       2  away                0            0      0
5       3  home                0            2      0
6       3  home                0            2      0
7       3  home                1            2      1
8       4  away                0            0      0
9       4  away                0            0      0
10      4  away                0            0      0
11      5  home                1            3      2
12      5  home                1            3      2
13      6  away                0            0      0
14      6  away                0            0      0
15      7  home                1            4      3
16      7  home                1            4      3

【讨论】:

这是完美的。谢谢!

以上是关于累积条件计数的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 获取具有条件的列的累积总和

pyspark中基于条件对多列进行分组的累积和函数

R(dplyr)中复位的条件运行计数(累计和)

Oracle SQL - 基于分组和条件运行求和

带复位的累积条件乘积

根据条件重置的 7 天累积总和