迭代列值并检查内部值

  • 本文关键字:内部 迭代 python pandas
  • 更新时间 :
  • 英文 :


对不起,我是python的新手。假设,我有一个列值以一定间隔重复的数据帧

更改停止响应电池[/tr>低电压[/tr>电池[/tr>dest_outage
dest_num dest_voltage
322 45.1
322 45.5
322 46.7
322 43.2
322 42.1
322 41.1 停止响应
322 45.1
322 43.4 低压
322 43.2
322 42.1 临界电压
322 40.1

您需要为每个组创建一个数字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

最新更新