对不起,我是python的新手。假设,我有一个列值以一定间隔重复的数据帧
dest_num | dest_voltage | |
---|---|---|
322 | 45.1 | 停止响应|
322 | 45.5 | 电池[/tr>|
322 | 46.7 | 低电压[/tr>|
322 | 43.2 | 无 |
322 | 42.1 | 无 |
322 | 41.1 | 停止响应 |
322 | 45.1 | 电池[/tr>|
322 | 43.4 | 低压 |
322 | 43.2 | 无 |
322 | 42.1 | 临界电压 |
322 | 40.1 | dest_outage
您需要为每个组创建一个数字id,其中组从stops responding
开始。您可以通过检查changes
是否等于stops responding
并取结果的累积和来完成此操作。
使用此分组,您可以检查所需列表中的所有值是否都在该组的changes
列中,并过滤结果(如果有(。
如果不再需要的话,当然可以删除group列,但这似乎在事后也会有所帮助。
import pandas as pd
df = pd.DataFrame({'dest_num': [322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322],
'dest_voltage': [45.1,45.5,46.7,43.2,42.1,41.1,45.1,43.4,43.2,42.1,40.1],
'changes': ['stops responding','battery','low voltage','none','none',
'stops responding','battery','low voltage','none','critical voltage',
'dest_outage']})
values = ['low voltage','critical voltage','dest_outage']
df['group'] = df['changes'].eq('stops responding').cumsum()
df.groupby('group').filter(lambda x: all([v in x['changes'].values for v in values]))
输出
dest_num dest_voltage changes group
5 322 41.1 stops responding 2
6 322 45.1 battery 2
7 322 43.4 low voltage 2
8 322 43.2 none 2
9 322 42.1 critical voltage 2
10 322 40.1 dest_outage 2