情况:
我有两个数据集:
我的任务是仅根据机器的生产时间范围进行过滤。这意味着基于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']
这是我尝试在日期时间过滤中添加“单位”(=计算机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']
不幸的是,以上代码无法正常工作。
问题:
谢谢您的帮助!
答案 0 :(得分:0)
我想发表此评论,但我没有足够的声誉来做到这一点。初步提示:
1)尝试检查您的钥匙。第一个df中的单位与第二个df中的单位具有不同的模式。您可能需要转换一个或另一个。 例如循环之前:
df1["Unit"] = df1["Unit"].apply(lambda x: x.split('_')[1]) # K2_110 -> 110
2)在您的示例中,您遍历 first 数据框,并将掩码也应用于 first 数据框
df1.loc[mask, 'Sarzs_no'] = row['Sarzs_no']
df1.loc[mask, 'Output'] = row['Output']`