如何在Pandas中合并顺序无关的双向行并汇总计数
解决双向行程次数合并求和的问题
我来帮你搞定这个需求——要把A-B和B-A方向的行程次数合并求和,用Pandas可以轻松实现,下面是具体的方案:
核心思路
不管行程是从A到B还是B到A,我们可以把每一组站点对转换成统一的顺序(比如总是把数值较小的站点放在前面,较大的放在后面),这样双向的站点对就会被归为同一组,之后只需要按这个统一的分组对Count列求和即可。
代码实现
方法一:用Pandas的apply排序
import pandas as pd # 你的示例数据集 group_station = pd.DataFrame( [[1, 2, 100], [2, 1, 200], [4, 6, 5], [6, 4, 10], [1, 4, 70]], columns=['A', 'B', 'Count'] ) # 生成统一顺序的站点对:每行的A、B按从小到大排序 group_station[['Station1', 'Station2']] = pd.DataFrame( group_station[['A', 'B']].apply(sorted, axis=1).tolist(), index=group_station.index ) # 按统一站点对分组,求和Count列 result = group_station.groupby(['Station1', 'Station2'], as_index=False)['Count'].sum() print(result)
方法二:用Numpy排序(更高效,适合大数据集)
如果你的数据集很大,用Numpy的sort会比apply更快:
import pandas as pd import numpy as np group_station = pd.DataFrame( [[1, 2, 100], [2, 1, 200], [4, 6, 5], [6, 4, 10], [1, 4, 70]], columns=['A', 'B', 'Count'] ) # 对A、B列按行排序,生成统一站点对 group_station[['Station1', 'Station2']] = np.sort(group_station[['A', 'B']], axis=1) # 分组求和 result = group_station.groupby(['Station1', 'Station2'], as_index=False)['Count'].sum() print(result)
输出结果
两种方法都会得到如下结果:
Station1 Station2 Count 0 1 2 300 1 1 4 70 2 4 6 15
这样就完美实现了把双向行程合并,得到两地的总行程次数啦~
内容的提问来源于stack exchange,提问作者Fernando Irarrázaval G
相关产品推荐
相关产品推荐

