【问题标题】:Filter on dataframe based on multiple features of another dataframe根据另一个数据帧的多个特征过滤数据帧
【发布时间】:2018-08-15 12:10:21
【问题描述】:

情况:
我有两个数据集:

  • df1:包含传感器的数据,每分钟登录的机器ID
  • df2:包含生产单元 ID-s、机器 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']

这是我尝试在日期时间过滤中添加“单元”(=机器 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 上也有一个过滤器参数(“单元”列)?

提前感谢您的帮助!

【问题讨论】:

  • The above code unfortunatelly is not working. 到底发生了什么?你有错误吗?你能提供一个minimal reproducible example吗?即数据作为文本,而不是图像。

标签: python pandas dataframe filter


【解决方案1】:

我想将此作为评论发布,但我没有足够的声誉来执行此操作。作为初步提示:

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

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

2) 在您的示例中,您遍历 first 数据帧并在 first 数据帧上应用掩码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多