如何根据group by条件过滤和获取行,其中日期是pandas [duplicate]中的重复列之一

xwmevbvl  于 2023-05-05  发布在  其他
关注(0)|答案(4)|浏览(89)

此问题已在此处有答案

Python Find duplicates across multiple columns(1个答案)
16小时前关闭
我有下面的Pandasdateframe。

import pandas as pd
data= [['A','Sensor1','1/12/2023 2:00:00 AM'],['A','Sensor2','1/12/2023 2:00:00 AM'],['A','Sensor7','1/12/2023 2:00:00 AM'],['A','Sensor3','1/12/2023 2:00:00 AM'],['A','Sensor1', '2/12/2023 12:00:00 PM'],['A','Sensor2','2/12/2023 12:00:00 PM'],['A','Sensor7','2/12/2023 12:00:00 PM'],['A','Sensor4','3/12/2023 3:00:00 AM'],['B','Sensor7','2/12/2023 5:00:00 AM'],['B','Sensor8','2/12/2023 5:00:00 AM'],['B','Sensor2','2/12/2023 5:00:00 AM'],['B','Sensor5','4/12/2023 4:00:00 AM'],['B','Sensor7','6/12/2023 5:00:00 AM'],['B','Sensor8','6/12/2023 5:00:00 AM'],['B','Sensor3','6/12/2023 5:00:00 AM'],['C','Sensor1','6/12/2023 5:00:00 AM'],['C','Sensor2','7/12/2023 5:00:00 AM']]
df = pd.DataFrame(data,columns =['System','Sensor','SensorTime'])

我想获得具有相同传感器同时跳闸的系统行。即,系统A具有三个传感器1、2和7,它们在给定月份的同一时间跳闸。系统B的传感器7和8在给定月份的同一时间跳闸。
预期输出为-
| 系统|传感器|传感器时间|
| --------------|--------------|--------------|
| 一个|传感器1|2023年1月12日上午2:00:00|
| 一个|传感器2|2023年1月12日2:00:00 AM|
| 一个|传感器7|2023年1月12日2:00:00 AM|
| 一个|传感器1|2023年2月12日12:00:00 PM|
| 一个|传感器2|2023年2月12日12:00:00 PM|
| 一个|传感器7|2023年2月12日12:00:00 PM|
| B|传感器7|2023年2月12日上午5:00:00|
| B|传感器8|2023年2月12日5:00:00 AM|
| B|传感器7|2023年6月12日上午5:00:00|
| B|传感器8|2023年6月12日上午5:00:00|
目前,我对每个系统groupby进行迭代(iterrows),并获取列表列表中加载的所有传感器和时间,然后对每个系统进行比较和过滤。请咨询是否有更好的方法来执行。

jjhzyzn0

jjhzyzn01#

您可以删除SystemSensor列中的未重复的行

df[df.duplicated(['System', 'Sensor'], keep=False)]
lb3vh1jj

lb3vh1jj2#

使用groupby().size来计算(System, SensorTime)对的数量,还使用transform将大小传播到每行:

mask = df.groupby(['System', 'SensorTime'])['Sensor'].transform('size').ge(2)
df[mask]

输出(注意第一组在样本数据中有两个空格``):

System   Sensor             SensorTime
0       A  Sensor1  1/12/2023  2:00:00 AM
2       A  Sensor7  1/12/2023  2:00:00 AM
3       A  Sensor3  1/12/2023  2:00:00 AM
4       A  Sensor1  2/12/2023 12:00:00 PM
5       A  Sensor2  2/12/2023 12:00:00 PM
6       A  Sensor7  2/12/2023 12:00:00 PM
8       B  Sensor7   2/12/2023 5:00:00 AM
9       B  Sensor8   2/12/2023 5:00:00 AM
10      B  Sensor2   2/12/2023 5:00:00 AM
12      B  Sensor7   6/12/2023 5:00:00 AM
13      B  Sensor8   6/12/2023 5:00:00 AM
14      B  Sensor3   6/12/2023 5:00:00 AM
egmofgnx

egmofgnx3#

Groupby子句可用于SystemSensorTime列。

df.groupby(['System','SensorTime'])
mlnl4t2r

mlnl4t2r4#

# Convert the SensorTime column to a datetime object
df['SensorTime'] = pd.to_datetime(df['SensorTime'])

groups = df.groupby(['System', 'Sensor', 'SensorTime']).size()

# Filter the groups where the count of rows is greater than 1
result = groups[groups > 1].reset_index()

相关问题