【问题标题】:fill data from one dataframe to another with criteria then repeatedly fill till criteria changes使用标准将数据从一个数据框填充到另一个数据框,然后重复填充直到标准更改
【发布时间】:2020-11-05 05:14:26
【问题描述】:

所以失败了:

我在同一日历年有两个数据框,但每天的时间平均值不同。 DF1 是分钟,DF2 是每天。

指令

我现在正在考虑使用“天数”标准 days = 1,2,3....i 并将 DF2 中的所有列放入 DF1 中,并在当天重复每一天填充每一行平均日期然后移到第二天!

  • 我有两个文件,它们都是 CSV 文件。
  • 这些将作为转换为数据帧的 CSV 文件读入 pandas。
  • 我正在考虑重新开始,下面的代码是第一次尝试 将每分钟数据与每小时数据相关联
  • 添加自 2014 年 9 月 12 日以来的天数列并执行以下操作: df[days] = df1[days] 打印来自 df 的列(在本例中 是每日平均值)df1(这是 3 分钟的平均数据)

下面的代码示例将每小时数据与每分钟数据相关联。

制表符分隔示例:

Date    Pressure    Temperature Salinity    Density
9/12/2014   20.67517553 9.467564621 34.75207884 1026.945064
9/13/2014   20.50534192 9.081091137 34.77935638 1027.028736

我希望将其关联到:

    Date    seawater_pressure   seawater_temperature    seawater_conductivity   practical_salinity  density lat lon Years
9/12/2014 0:00  177.859887  4.574663842 3.307338475 34.90723316 1028.476924 59.97533    -39.48183   2014.697222
9/12/2014 0:03  214.3598333 4.397781667 3.292384278 34.89887436 1028.659543 59.97533    -39.48183   2014.697222
9/12/2014 0:06  264.5863333 4.208137222 3.276747278 34.88825043 1028.905126 59.97533    -39.48183   2014.697222
9/12/2014 0:09  314.3161111 4.1242  3.271341056 34.88661059 1029.14336  59.97533    -39.48183   2014.697222
9/13/2014 21:00 2608.358764 1.83854382  3.163967753 34.87050646 1039.841076 59.97533    -39.48183   2014.7
9/13/2014 21:03 2571.051778 2.073876111 3.1833685   34.87381988 1039.643173 59.97533    -39.48183   2014.7
9/13/2014 21:06 2520.0315   2.334582222 3.204682722 34.87920389 1039.3818   59.97533    -39.48183   2014.7
9/13/2014 21:09 2469.559944 2.569326667 3.224910833 34.89808956 1039.136967 59.97533    -39.48183   2014.7
9/13/2014 21:12 2419.662011 2.67413743  3.23247419  34.90147888 1038.90175  59.97533    -39.48183   2014.7

我有很多数据。下面的代码与拆分混淆,但我认为过滤器的日子会更好

import os
import xarray as xr
import pandas as pd
import re, time, random 

data = '''Date          pressure    temperature          density
9/12/2014 9:00     170            4.0                1028
9/12/2014 10:00    368            4.2                1028.5
9/12/2014 11: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:55  264.5863333     4.208137222         1028.905
9/12/2014 10:01  314.3161111     4.1242              1029.143
9/12/2014 10:02  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

【问题讨论】:

  • 如果我理解正确,您想将daily averaged data 关联到daily minute data,对吗?
  • 是的,没错!我想用每日数据计算异常情况

标签: python pandas dataframe


【解决方案1】:

这不是您正在寻找的,但它可能会有所帮助。

data = '''Date          pressure    temperature          density
9/12/2014        170            4.0                1028
9/13/2014     368            4.2                1028.5
9/14/2014    369            4.4                1030.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/13/2014 9:55  264.5863333     4.208137222         1028.905
9/13/2014 10:01  314.3161111     4.1242              1029.143
9/14/2014 10:02  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['Date'] = pd.to_datetime(df1.Date)
df2['Date'] = pd.to_datetime(df2.Date)
df3 = pd.merge_asof(df1, df2.rename(columns={'Date':'date'}), left_on='Date', right_on='date', direction='nearest', suffixes=['_minute','_daily'])
df3['date'] = df3.date.dt.strftime("%m/%d/%Y")
df3['Date'] = df3.Date.dt.strftime("%m/%d/%Y %H:%M")

print(df3)

输出

               Date pressure_minute temperature_minute density_minute        date pressure_daily temperature_daily density_daily
0  09/12/2014 09:00  177.859887      4.574663842        1028.477       09/12/2014  170            4.0               1028        
1  09/12/2014 09:01  214.3598333     4.397781667        1028.66        09/12/2014  170            4.0               1028        
2  09/13/2014 09:55  264.5863333     4.208137222        1028.905       09/13/2014  368            4.2               1028.5      
3  09/13/2014 10:01  314.3161111     4.1242             1029.143       09/13/2014  368            4.2               1028.5      
4  09/14/2014 10:02  363.8005587     4.02983352         1029.377       09/14/2014  369            4.4               1030.5      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2020-11-28
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多