【问题标题】:Filter a Dataframe with another Dataframe to extract Certain Values用另一个数据框过滤一个数据框以提取某些值
【发布时间】:2020-10-27 04:58:36
【问题描述】:

我有两个 csv 文件。

  • 一个人有详细的数据

  • 其他有每小时

  • 两者具有相同的标题

我想在每分钟数据帧上运行每小时数据帧,以提取带有条件的某些条目:

  1. 过滤器 DF(每小时 DF)需要在时间上与它所在的文件匹配 在 mm/dd/yyyy 9:00 到每分钟 DF 中搜索 Ie 值 mm/dd/yyyy 9:59 使用每小时 DF 中 mm/dd/yyyy 9:00 的值作为 搜索条件。

  2. 过滤条件使用 3 个可变列 +- 每个列都有一定的范围。

  3. 选择的满足过滤器的数据被提取到另一个数据帧中,以后保存为csv

这听起来像是以前必须有人做过的事情!我自己知道一点熊猫,但只对数据帧做了简单的过滤器。

Df1 分钟数据

    Date        pressure      temperature           density
9/12/2014 9:00  177.859887      4.574663842         1028.477
9/12/2014 9:01  214.3598333     4.397781667         1028.66
9/12/2014 9:02  264.5863333     4.208137222         1028.905
9/12/2014 10:00 314.3161111     4.1242              1029.143
9/12/2014 10:01 363.8005587     4.02983352          1029.377

DF2 每小时数据

    Date          pressure    temperature          density
9/12/2014 9:00     170            4.0                1028
9/12/2014 10:00    368            4.2                1028.5

在上面的例子中,三个变量是压力、温度和密度。为简单起见,让我们尝试提取 DF1 中的第一行和第五行,以便我们的示例搜索条件

  • 压力 +- 8
  • 温度 +-.6
  • 密度 +- 1

制作 DF3过滤数据

 Date             pressure          temperature         density
9/12/2014 9:00   177.859887         4.574663842         1028.477
9/12/2014 10:01  363.8005587        4.02983352          1029.377

我不完全知道如何处理这个问题。会是for循环吗?我不知道在哪里可以制作出优雅且制作精良的东西。

    For idx in DF
    
    For idx2 in DF2
    
    if idx2 == date in idx and variable 1 +- range and variable 2 +- range and variable 3 +- range
    
    print idx
    
    when datetime (only hourly resolution) in idx ≠ datetime in idx2; idx +1

【问题讨论】:

标签: python pandas dataframe datetime filtering


【解决方案1】:
  1. 将样本数据导入 df1 和 df2
  2. 定义作为观察时间戳的索引
  3. 将每小时数据上采样到每分钟
  4. 加入上采样日期到分钟频率数据以创建 df3
  5. 您现在可以在一个数据帧中进行任意程度的比较和对比
data = '''Date          pressure    temperature          density
9/12/2014 9:00     170            4.0                1028
9/12/2014 10:00    368            4.2                1028.5'''
da = [[i for i in re.split("[ ][ ]+", l)] for l in data.split("\n")]
df2 = pd.DataFrame(da[1:], columns=da[0])
data='''Date        pressure      temperature           density
9/12/2014 9:00  177.859887      4.574663842         1028.477
9/12/2014 9:01  214.3598333     4.397781667         1028.66
9/12/2014 9:02  264.5863333     4.208137222         1028.905
9/12/2014 10:00  314.3161111     4.1242              1029.143
9/12/2014 10:01  363.8005587     4.02983352          1029.377'''
da = [[i for i in re.split("[ ][ ]+", l)] for l in data.split("\n")]
df1 = pd.DataFrame(da[1:], columns=da[0])

df1.index = pd.to_datetime(df1.Date, format="%d/%m/%Y %H:%M", utc=True)
df2.index = pd.to_datetime(df2.Date, format="%d/%m/%Y %H:%M", utc=True)
df3 = df1.join(df2.resample("1min").pad(), rsuffix="_hourly")
df3

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2023-03-12
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多