我有一个数据帧,其中的数据看起来像这样:
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"})
ds | 名称 | >向上 | >向下 | ||
---|---|---|---|---|---|
0 | 2021-03-01 02:55:00 | name1+name2 | 9188>td style="ext-align:right;">46768[/tr>|||
1 | 2021-03:00:00 | 2 | 2021-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()
。