如何使用Pandas将数据帧列部分相加到Python中另一个数据帧中包含的时间值

2024-04-25 23:23:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有第一个数据帧df1,看起来像这样:

                    volume
timestamp
2021-01-04 04:00:00   20
2021-01-04 04:30:00   5
2021-01-04 05:00:00   15
2021-01-04 05:30:00   5
2021-01-04 06:00:00   10
2021-01-04 06:30:00   5
2021-01-04 07:00:00   25
2021-01-04 07:30:00   5
2021-01-04 08:00:00   15
2021-01-05 04:00:00   25
2021-01-05 04:30:00   5
2021-01-05 05:00:00   5
2021-01-05 05:30:00   15
2021-01-05 06:00:00   10
2021-01-05 06:30:00   5
2021-01-05 07:00:00   15
2021-01-05 07:30:00   10
2021-01-05 08:00:00   20
...                  ...

第二个是df2,看起来像这样:

                        high
timestamp                          
2021-01-04 05:30:00     134.43
2021-01-05 06:30:00     130.30
...                        ...

我需要df1中基于df2中的时间戳值的卷部分的总和。表示2021-01-04从04:00:00到05:30:00的总体积,以及2021-01-05从04:00:00到06:30:00的总体积,以获得如下结果的数据帧:

            volume_up_to_high
date
2021-01-04      45
2021-01-05      65
...            ... 

用Python和Pandas做这件事最简单的方法是什么

谢谢


1条回答
网友
1楼 · 发布于 2024-04-25 23:23:39

pandas.DataFrame.mergegroupby.agg一起使用的一种方法:

# If not already done so, make `timestamp` columns datetime object
df1["timestamp"] = pd.to_datetime(df1["timestamp"])
df2["timestamp"] = pd.to_datetime(df2["timestamp"])

# Make `date` columns each as a common point for merge
df1["date"] = df1["timestamp"].dt.date
df2["date"] = df2["timestamp"].dt.date

# merge then groupby
df = df1.merge(df2, on="date")
new_df = df[df["timestamp_x"].le(df["timestamp_y"])].groupby("date").agg(volume_up_to_high=("volume", sum))
print(new_df)

输出:

            volume_up_to_high
date                         
2021-01-04                 45
2021-01-05                 65

相关问题 更多 >