You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于n列复制特定行并反转数据框中的机场代码

实现方法

以下提供两种常用的实现方案,分别适用于Python数据处理和数据库场景:

方案一:Python Pandas

假设你的数据已经加载为Pandas DataFrame,执行以下步骤即可完成需求:

import pandas as pd

# 1. 构造原数据集(如果是从文件读取,用pd.read_csv/pd.read_excel即可)
data = {
    'ID': [1, 2, 3, 4],
    'departure_airport': ['ZRH', 'ZRH', 'MSY', 'VIE'],
    'arrival_airport': ['BUD', 'MSY', 'IAD', 'ZRH'],
    'n': [1, 2, 2, 1]
}
df = pd.DataFrame(data)

# 2. 筛选n=2的行,交换出发/到达机场代码
reversed_rows = df[df['n'] == 2].copy()
reversed_rows[['departure_airport', 'arrival_airport']] = reversed_rows[['arrival_airport', 'departure_airport']].values

# 3. 标记原行与反转行,用于排序
df['is_original'] = 1
reversed_rows['is_original'] = 0

# 4. 合并数据并排序,确保原行在前,对应反转行在后
combined = pd.concat([df, reversed_rows], ignore_index=True)
combined.sort_values(by=['ID', 'is_original'], ascending=[True, False], inplace=True)

# 5. 重新生成连续的ID,并清理临时列
combined['ID'] = range(1, len(combined) + 1)
combined.drop('is_original', axis=1, inplace=True)

# 查看结果
print(combined.to_string(index=False))

执行后会输出你期望的结果:原行保留,n=2的行对应反转行紧跟其后,ID连续递增。

方案二:SQL

假设数据存储在名为flights的数据库表中,使用以下SQL语句可以直接生成目标结果:

SELECT
    ROW_NUMBER() OVER (ORDER BY original_id, is_original DESC) AS ID,
    departure_airport,
    arrival_airport,
    n
FROM (
    -- 保留所有原行
    SELECT
        ID AS original_id,
        departure_airport,
        arrival_airport,
        n,
        1 AS is_original
    FROM flights
    UNION ALL
    -- 生成n=2行的反转版本
    SELECT
        ID AS original_id,
        arrival_airport AS departure_airport,
        departure_airport AS arrival_airport,
        n,
        0 AS is_original
    FROM flights
    WHERE n = 2
) AS combined_data
ORDER BY ID;

这个语句通过UNION ALL合并原行和反转行,再用ROW_NUMBER()生成连续的ID,排序逻辑保证原行在前,反转行紧随对应的原行之后。

内容的提问来源于stack exchange,提问作者sdiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:35:27