繁体   English   中英

根据另一个数据框的多个功能对数据框进行过滤

[英]Filter on dataframe based on multiple features of another dataframe

情况:
我有两个数据集:

  • df1:包含传感器的数据,每分钟登录的机器ID
  • df2:包含生产单位ID,机器ID以及单位的开始和结束日期时间

DF1:
在此处输入图片说明

DF2:
在此处输入图片说明

我的任务是仅按机器的生产时间范围进行过滤。 这意味着基于df2中的生产日期时间(这些时间是df2中开始和停止之间的时间范围),我需要从df2中滤除泄漏传感器数据(传感器数据每分钟记录在df2中,无论是否有生产或不)。

问题:
我能够编写一个代码来过滤df2中的时间间隔,但是我也无法弄清楚如何对计算机ID进行过滤。
这是我的工作代码,仅包含日期时间过滤:

for index, row in df1.iterrows():
    mask = ((df2.index >= row['Start']) & (df2.index <= row['Stop']))
    df2.loc[mask, 'Sarzs_no'] = row['Sarzs_no']
    df2.loc[mask, 'Output'] = row['Output']

这是我尝试将“ Unit”(=计算机ID)过滤以及日期时间过滤添加到其中:

for index, row in df1.iterrows():
    mask = ((df1.index >= row['Start']) & (df1.index <= row['Stop']) & (row['Unit']==df1.Unit))
    df1.loc[mask, 'Sarzs_no'] = row['Sarzs_no']
    df1.loc[mask, 'Output'] = row['Output']

不幸的是,以上代码无法正常工作。

问题:

  1. 您能告诉我我在做什么错吗?
  2. 您能否让我知道如何在机器ID(列“ Unit”)上添加过滤参数?

提前谢谢你的帮助!

我想发表此评论,但我没有足够的声誉来做到这一点。 初步提示:

1)尝试检查您的钥匙。 第一个df中的单位与第二个df中的单位具有不同的模式。 您可能需要转换一个或另一个。 例如循环之前:

df1["Unit"] = df1["Unit"].apply(lambda x: x.split('_')[1]) # K2_110 -> 110

2)在您的例子中,你通过第一数据帧迭代和敷面膜上的第一个数据帧,以及

df1.loc[mask, 'Sarzs_no'] = row['Sarzs_no']
df1.loc[mask, 'Output'] = row['Output']`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM