【问题标题】:How to aggregate table by conditions?如何按条件聚合表?
【发布时间】:2021-10-03 05:01:41
【问题描述】:

我有一个按键和时间排序的表格,然后添加了一个指标:

Key Time Value Indicator
A 2021-01-01 00:00 10.0 Y
A 2021-01-01 00:15 20.0 Y
A 2021-01-01 00:30 30.0 N
A 2021-01-01 00:45 10.0 Y
A 2021-01-01 01:00 10.0 Y
A 2021-01-01 01:15 5.0 Y
B 2021-01-01 00:00 10.0 Y
B 2021-01-01 00:15 10.0 Y
B 2021-01-01 00:30 0.0 N
B 2021-01-01 00:45 -30.0 N
C 2021-01-01 00:00 10.0 Y
C 2021-01-01 00:15 70.0 N
C 2021-01-01 00:30 10.0 Y
C 2021-01-01 00:45 25.0 Y
C 2021-01-01 01:00 5.0 Y

我想添加一个带数字的索引,跳过“N”。 如果指标连续等于“Y”,则同一键内的索引从 1 开始,结果:

Key Time Value Indicator Index
A 2021-01-01 00:00 10.0 Y 1
A 2021-01-01 00:15 20.0 Y 1
A 2021-01-01 00:30 30.0 N
A 2021-01-01 00:45 10.0 Y 2
A 2021-01-01 01:00 10.0 Y 2
A 2021-01-01 01:15 5.0 Y 2
B 2021-01-01 00:00 10.0 Y 1
B 2021-01-01 00:15 10.0 Y 1
B 2021-01-01 00:30 0.0 N
B 2021-01-01 00:45 -30.0 N
C 2021-01-01 00:00 10.0 Y 1
C 2021-01-01 00:15 70.0 N
C 2021-01-01 00:30 10.0 Y 2
C 2021-01-01 00:45 25.0 Y 2
C 2021-01-01 01:00 5.0 Y 2

我怎样才能得到这个结果? 非常感谢!

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我是 python 新手,所以我不知道如何添加数字列..

标签: python pandas date datetime


【解决方案1】:

你可以使用:

mask = df['Indicator'].eq('Y')
mask2 = mask.groupby(df['Key']).shift(fill_value=False)

df['Index'] = ((mask & ~mask2))
               .groupby(df['Key'])
               .cumsum()
               .where(mask)
               .convert_dtypes()
               )

输出:

   Key              Time  Value Indicator  Index
0    A  2021-01-01 00:00   10.0         Y      1
1    A  2021-01-01 00:15   20.0         Y      1
2    A  2021-01-01 00:30   30.0         N   <NA>
3    A  2021-01-01 00:45   10.0         Y      2
4    A  2021-01-01 01:00   10.0         Y      2
5    A  2021-01-01 01:15    5.0         Y      2
6    B  2021-01-01 00:00   10.0         Y      1
7    B  2021-01-01 00:15   10.0         Y      1
8    B  2021-01-01 00:30    0.0         N   <NA>
9    B  2021-01-01 00:45  -30.0         N   <NA>
10   C  2021-01-01 00:00   10.0         Y      1
11   C  2021-01-01 00:15   70.0         N   <NA>
12   C  2021-01-01 00:30   10.0         Y      2
13   C  2021-01-01 00:45   25.0         Y      2
14   C  2021-01-01 01:00    5.0         Y      2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2021-08-24
    相关资源
    最近更新 更多