SAS编程:移除城市间距离数据中的往返重复记录
移除城市往返重复记录的解决方案
嘿,我来帮你搞定这个问题!要移除这种出发地和目的地互为往返的重复记录,我们可以用Python的pandas库轻松实现,核心思路是给每一对路线生成一个标准化的唯一标识,让往返的记录拥有相同的标识,之后就能方便地去重了。
步骤1:加载原始数据
首先我们把你的数据集转换成pandas DataFrame:
import pandas as pd # 你的原始数据 raw_data = { 'Source': ['USA', 'USA', 'UK', 'Germany', 'Spain'], 'Destination': ['UK', 'Spain', 'USA', 'Spain', 'USA'], 'Distance': [1000, 200, 1000, 500, 200] } df = pd.DataFrame(raw_data)
步骤2:生成标准化路线标识
我们给每一行生成一个排序后的路线元组(比如把USA-UK和UK-USA都转换成('UK', 'USA')),这样往返路线就会有完全相同的标识:
# 创建标准化路线列:将出发地和目的地按字母排序后组合成元组 df['standardized_route'] = df.apply( lambda row: tuple(sorted([row['Source'], row['Destination']])), axis=1 )
步骤3:去重并清理结果
基于标准化路线列去重,保留每个唯一路线的第一条记录(因为你的数据中往返距离一致,保留任意一条都可以),最后删掉临时的标准化路线列:
# 去重,保留每个唯一路线的第一条记录 cleaned_df = df.drop_duplicates(subset='standardized_route', keep='first').drop('standardized_route', axis=1) # 查看清理后的结果 print(cleaned_df)
最终输出结果
运行上面的代码后,你会得到以下清理后的数据集:
| Source | Destination | Distance |
|---|---|---|
| USA | UK | 1000 |
| USA | Spain | 200 |
| Germany | Spain | 500 |
额外提示
如果你的数据中存在往返距离不一致的情况,你可以用聚合函数来处理距离(比如取平均值、最大值等),示例代码如下:
# 按标准化路线分组,聚合距离(这里以平均值为例) aggregated_df = df.groupby('standardized_route').agg( Source=('Source', 'first'), Destination=('Destination', 'first'), Average_Distance=('Distance', 'mean') ).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者P.Sharma
相关产品推荐
相关产品推荐

