python与sql: 分组聚合字符串与拆分

        日常进行数据分析时,如果需要知道每辆车出行的具体日期,那就要用到分组聚合字符串。同时对于轨迹数据来说,需要拆分轨迹,以获得单独的路段。本文使用python和sql分别实现上述过程。

        欢迎关注本人公众号--交通数据探索师

python

import pandas as pd

data = pd.DataFrame({'vehicle': ['沪A', '沪A', '沪A', '沪B', '沪B'], 
                     'date': ['20240601', '20240602', '20240603', '20240510', '20240511']})
data = (data.
        groupby('vehicle').
        agg(date_all=('date', lambda x: ','.join(sorted(x.unique())))).
        reset_index())

data

如上图,可以看出沪A在2024年6月1日、2024年6月2日、2024年6月3日均有出行。

clickhouse

select vehicle, arrayStringConcat(arraySort(groupArray(date)),',') as date_all
from table_name
group by vehicle

 postgresql

select vehicle, string_agg(distinct date, ',') 
from table_name 
group by vehicle

        对于车辆轨迹数据来说,可能所给的数据表中,每个车辆的轨迹是将所经过路段按照顺序拼接起来的字符串,但是我们的操作中需要拆分这个轨迹字符串以获得单独的路段,这个过程相当于上面分组聚合字符串的逆过程。

python

import pandas as pd

data = pd.DataFrame({'vehicle': ['沪A', '沪B'], 
                     'road_id': ['123+456+789', '12+34']})

# 拆分字符串
data['road_id'] = data['road_id'].str.split('+')
data = data.explode('road_id')
data

 clickhouse

select arrayJoin(splitByChar(road_id, '+')) as road_id ,vehicle
from table_name

postgresql

select regexp_split_to_table(road_id, '+') as road_id, vehicle
from table_name

以上就是本文的全部内容了。期待大家的点赞、关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煮雨小筑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值