通过平滑合并DataFrame
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过平滑合并DataFrame相关的知识,希望对你有一定的参考价值。
我想有效地将两个数据帧合并为一个,但是一个数据帧比另一个具有“更多数据”。例:
df_A = pd.DataFrame({"Time": [pd.to_datetime("09:11:37.600"),
pd.to_datetime("09:11:37.700"),
pd.to_datetime("09:11:37.800")],
"A": [0.1, 0.7, -1.1]})
df_B = pd.DataFrame({"Time": [pd.to_datetime("09:11:37.610"),
pd.to_datetime("09:11:37.640"),
pd.to_datetime("09:11:37.670"),
pd.to_datetime("09:11:37.700"),
pd.to_datetime("09:11:37.730"),
pd.to_datetime("09:11:37.760"),
pd.to_datetime("09:11:37.790"),
pd.to_datetime("09:11:37.820")],
"B": [0.3, -1.5, -0.5, 0.2, 1.2, -0.9, 0.1, -0.2]})
我想创建第三个数据帧df_C
,它是最短的先前数据帧的增强副本。增强由最长数据帧中的“平滑”列给出。可以通过平均操作或另一个来执行平滑。在这个例子中,我想做以下事情:
- 对于与
pd.to_datetime("09:11:37.600")
相对应的行,平均值0.3, -1.5, -0.5
,因为它们对应于pd.to_datetime("09:11:37.600")
和下一行中的时间之间的时间,pd.to_datetime("09:11:37.700")
; - 对于
pd.to_datetime("09:11:37.700")
的对应,平均值0.2, 1.2, -0.9, 0.1
,因为它们对应于pd.to_datetime("09:11:37.700")
和下一行中的时间之间的时间,pd.to_datetime("09:11:37.800")
; - 等等。
数据框df_C
将有三列:时间,A和B,其中时间和A来自df_A
,B是来自df_B
的“平滑”列,遵循上述程序。
有没有办法在没有明确编写for
循环的情况下执行此操作,这对于很长的数据帧来说可能很昂贵?
我尝试了以下内容,但它将相同的值复制到所有日期(即,它不正确)。
df_C = df_A.copy()
df_C.loc[:, "B"] = df_B.loc[(df_B["Time"] >= df_A.shift(1)["Time"].values[1]) & (df_B["Time"] < df_A.shift(-1)["Time"].values[0]), "B"].mean()
答案
如果您将时间用作索引,则可以使用pandas.resample()
方法。
Here你可以找到用于不同时期的缩写。
Code
import pandas as pd
df_B = pd.DataFrame(
{"B": [0.3, -1.5, -0.5, 0.2, 1.2, -0.9, 0.1, -0.2]},
index = [
pd.to_datetime("09:11:37.610"),
pd.to_datetime("09:11:37.640"),
pd.to_datetime("09:11:37.670"),
pd.to_datetime("09:11:37.700"),
pd.to_datetime("09:11:37.730"),
pd.to_datetime("09:11:37.760"),
pd.to_datetime("09:11:37.790"),
pd.to_datetime("09:11:37.820")])
df_resampled = df_B.resample('100L').mean()
Result
B
2018-03-05 09:11:37.600 -0.566667
2018-03-05 09:11:37.700 0.150000
2018-03-05 09:11:37.800 -0.200000
以上是关于通过平滑合并DataFrame的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用pd.concat纵向合并多个dataframe实战:纵向合并(ignore_index参数)为纵向合并的多个dataframe设置标识符指定数据来源(通过字典方式设置数据来源键)
R语言merge函数连接多个dataframe数据集迭代内连接dataframe数据( iteratively merge data frames in R)默认merge函数通过公共列名合并数据