如何输出满足特殊条件的 Pandas DataFrame?

Posted

技术标签:

【中文标题】如何输出满足特殊条件的 Pandas DataFrame?【英文标题】:How to output a Pandas DataFrame that satisfies a special condition? 【发布时间】:2022-01-14 21:48:12 【问题描述】:

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

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

我以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 & energy >= 0.3(type = 22 & type = 0)

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

我的源数据帧

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

【问题讨论】:

每组A,B,C22 编排?输入类型只有22 or 0 ? 那些“事件”是粒子的碰撞吗? 'type' 总是 0 或 22。'event' 是粒子数。 【参考方案1】:

如果每个由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

【讨论】:

以上是关于如何输出满足特殊条件的 Pandas DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas Concat "WHERE" 满足条件

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

如何根据计数器应用多个条件,并使用 pandas 和 python 在 excel 中为每个条件提供输出?

pandas - 根据满足条件的列合并行

特殊的数字

在满足条件的地方,获取最后一行 pandas