首页 > 解决方案 > 按日期时间合并行数据

问题描述

我有一个数据框,其中的数据如下所示:

ds                    Name     Up     Down

2021-03-01 02:55:00   name1    14094  13384
2021-03-01 03:00:00   name1    16124  18283
2021-03-01 03:05:00   name1    20838  23124
2021-03-01 02:55:00   name2    15094  33384
2021-03-01 03:00:00   name2    16174  48283
2021-03-01 03:05:00   name2    30838  63124

所以我有一个名称不同的列,但它们可以有相同的日期时间。

我想做的是将具有相同日期的行合并到一个新的数据框或类似的东西中,但是向上/向下值加在一起,即结果数据框应该是这样的:

ds                    Name           Up     Down

2021-03-01 02:55:00   name1+name2    29188  46768
2021-03-01 03:00:00   name1+name2    32298  66569
2021-03-01 03:05:00   name1+name2    51676  86248

列的命名约定Name我并没有真正考虑过。我不认为那是那么重要。

标签: pythonpandas

解决方案


这是一个直截了当groupby().agg()

import io
df = pd.read_csv(io.StringIO("""ds                    Name     Up     Down
2021-03-01 02:55:00   name1    14094  13384
2021-03-01 03:00:00   name1    16124  18283
2021-03-01 03:05:00   name1    20838  23124
2021-03-01 02:55:00   name2    15094  33384
2021-03-01 03:00:00   name2    16174  48283
2021-03-01 03:05:00   name2    30838  63124"""), sep="\s\s+", engine="python")
df["ds"] = pd.to_datetime(df["ds"])

df.groupby("ds", as_index=False).agg({"Name":lambda s: "+".join(list(s)), "Up":"sum","Down":"sum"})

ds 姓名 向上 向下
0 2021-03-01 02:55:00 姓名1+姓名2 29188 46768
1 2021-03-01 03:00:00 姓名1+姓名2 32298 66566
2 2021-03-01 03:05:00 姓名1+姓名2 51676 86248

推荐阅读