繁体   English   中英

如何满足特殊条件的 output 和 Pandas DataFrame?

[英]How to output a Pandas DataFrame that satisfies a special condition?

我有一个表格的pandas.DataFrame 我将向您展示一个简单的示例。 (实际上,它由数亿行数据组成。)。

(type = 0)属于(type = 22)时,我想 output (type=22 and type=0)属于(type=22 & energy >= 0.3)

我将以event c为例进行说明。

event c的“索引”为 10-16。

并且index 10~12是属于index 10, type 22, energy 0.1的一组(A)。

index 13~14是属于index 13, type 22, energy 0.32的一组 (B)。

index 15~16是属于index 15, type 22, energy 0.1的集合 (C)。

(type = 22 & type = 0)属于type = 22 & energy >= 0.3应该是 output。

因此,在event c中,我需要的是index 15~16的集合(B)。 event d中, (type = 22 & type = 0)不是 output 因为没有任何东西满足条件(type = 22 & energy >= 0.3)

我的源DataFrame

df=

  index    event    type    energy    ID
    

    0       a        22      0.3       1
    1       a        0       0.01      2
    2       a        0       0.02      3
    3       a        22      0.21      4
    4       a        0       0.03      5
    5       b        22      0.11      2
    6       b        0       0.02      3
    7       b        22      0.41      4
    8       b        0       0.05      1
    9       b        0       0.01      2
    10      c        22      0.1       1
    11      c        0       0.01      2
    12      c        0       0.02      3
    13      c        22      0.32      4
    14      c        0       0.022     5
    15      c        22      0.1       2
    16      c        0       0.02      3
    17      d        22      0.1       4
    18      d        0       0.05      1
    19      d        0       0.01      2
    20      e        22      0.1       4
    21      e        0       0.05      1
    22      e        0       0.01      2
    23      e        22      0.2       4
    24      e        0       0.05      1
    25      e        0       0.01      2
    26      e        22      0.32      4
    27      e        0       0.05      1
    28      e        0       0.01      2
    29      f        22      0.5       4
    30      f        0       0.05      1
    31      f        0       0.01      2

这是我的预期结果:

df=

  index    event    type   energy    ID
    

    0       a        22      0.3       1
    1       a        0       0.01      2
    2       a        0       0.02      3
    7       b        22      0.41      4
    8       b        0       0.05      1
    9       b        0       0.01      2
    13      c        22      0.32      4
    14      c        0       0.022     5
    26      e        22      0.32      4
    27      e        0       0.05      1
    28      e        0       0.01      2
    29      f        22      0.5       4
    30      f        0       0.05      1
    31      f        0       0.01      2

如果每个event分组由type=22开始并且只有type=0,22您可以通过与累积和比较来创建帮助组,然后使用GroupBy.transformGroupBy.first重复type=22行,比较并过滤boolean indexing

#if necessary filter only 0,22 rows
#df = df[df['type'].isin([0,22])]

g = df['type'].eq(22).cumsum()
df = df[df.groupby(['event',g])['energy'].transform('first') >= 0.3]
print (df)
      event  type  energy  ID
index                        
0         a    22   0.300   1
1         a     0   0.010   2
2         a     0   0.020   3
7         b    22   0.410   4
8         b     0   0.050   1
9         b     0   0.010   2
13        c    22   0.320   4
14        c     0   0.022   5
26        e    22   0.320   4
27        e     0   0.050   1
28        e     0   0.010   2
29        f    22   0.500   4
30        f     0   0.050   1
31        f     0   0.010   2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM