【问题标题】: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]
    })

我正在尝试制作两列:

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

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

标签: python pandas numpy pandas-groupby data-science


【解决方案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

【讨论】:

  • 这是完美的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2020-11-23
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多