【问题标题】:Difference between different lenght timestamp-indexed DataFrames不同长度的时间戳索引数据帧之间的差异
【发布时间】:2021-07-07 06:54:24
【问题描述】:

我有两个数据帧,都用时间戳值索引,例如“2021-03-23 13:04:00.134000+00:00”。

我想在某些列上计算它们之间的差异,但问题是它们没有时间对齐并且具有不同的行数。

有没有一种好方法可以使时间增量小于指定数量的所有元素的差异,并将 NaN 放在其他情况下?

编辑:

数据框 1:

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:04:00.134000+00:00| 200  | 50   |
|2021-03-23 13:34:00.134000+00:00| 100  | 10   |
|2021-03-23 14:04:00.134000+00:00| 100  | 10   |

数据框 2:

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:24:00.134000+00:00| 200  | 50   |
|2021-03-23 14:34:00.134000+00:00| 100  | 10   |

假设时间增量为 20 分钟的预期输出(Dataframe 1 和 Dataframe 2 的列之间的差异):

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:04:00.134000+00:00| 0    | 0    |
|2021-03-23 13:44:00.134000+00:00| NaN  | NaN  |
|2021-03-23 15:04:00.134000+00:00| NaN  | NaN  |

【问题讨论】:

  • 你能添加一些示例数据吗?两个 DataFrame 各 5 行,还添加预期输出?

标签: python pandas dataframe timestamp


【解决方案1】:

首先使用merge_asof

df = pd.merge_asof(df1, 
                   df2, 
                   left_index=True, 
                   right_index=True,
                   tolerance=pd.Timedelta('20Min'),
                   direction='forward',
                   suffixes=('','_'))
print (df)
                                  val1  val2  val1_  val2_
index                                                     
2021-03-23 13:04:00.134000+00:00   200    50  200.0   50.0
2021-03-23 13:34:00.134000+00:00   100    10    NaN    NaN
2021-03-23 14:04:00.134000+00:00   100    10    NaN    NaN

然后减去相同的列(仅将差异 _ 添加到末尾):

new = df.columns[df.columns.str.endswith('_')]
print (new)
Index(['val1_', 'val2_'], dtype='object')

orig = new.str.replace('_','')
print (orig)
Index(['val1', 'val2'], dtype='object')

df[orig] = df[orig].sub(df[new].to_numpy())

df = df.drop(new, axis=1)
print (df)
                                  val1  val2
index                                       
2021-03-23 13:04:00.134000+00:00   0.0   0.0
2021-03-23 13:34:00.134000+00:00   NaN   NaN
2021-03-23 14:04:00.134000+00:00   NaN   NaN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多