如何输出满足特殊条件的 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,C
由22
编排?输入类型只有22 or 0
?
那些“事件”是粒子的碰撞吗?
'type' 总是 0 或 22。'event' 是粒子数。
【参考方案1】:
如果每个由event
组成的组以type=22
开头并且只有type=0,22
,您可以通过与累积总和比较来创建辅助组,然后使用GroupBy.transform
和GroupBy.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 中的列值,使用基于其他列的条件值的前行的值?