按日期时间合并行数据



我有一个数据帧,其中的数据看起来像这样:

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列的命名约定我并没有考虑太多。我认为这没那么重要。

这是一个直接的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="ss+", 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"})
>>9188>td style="ext-align:right;">46768[/tr>
ds名称向上向下
02021-03-01 02:55:00name1+name2
12021-03:00:0022021-03:05:00
df = df.set_index('Date')
df
Name    Up      Down
Date            
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
df['Name'] = df['Name'].astype('str')
df = df.groupby(df.index).agg({'Name' : lambda x: '+'.join(x),
'Up':'sum',
'Down':'sum'})
df
Name        Up      Down
Date            
2021-03-01 02:55:00 name1+name2 29188   46768
2021-03-01 03:00:00 name1+name2 32298   66566
2021-03-01 03:05:00 name1+name2 51676   86248
df.reset_index()
Date         Name     Up   Down
0 2021-03-01 02:55:00  name1+name2  29188  46768
1 2021-03-01 03:00:00  name1+name2  32298  66566
2 2021-03-01 03:05:00  name1+name2  51676  86248

您可以在Python中使用Pandas来实现这一点。

考虑到您的数据帧为具有列ds的df,那么您可以使用类似于此df_new = df.groupby(df['ds'])的函数groupby()

最新更新