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

如何用Pandas对CSV每行的Id1-Id4列值按降序排序?

解决Pandas对每行ID列排序的问题

没问题,这个需求用Pandas可以轻松实现,核心是对每行的指定ID列进行排序操作,同时保留NaN在列的末尾。下面是具体的步骤和代码:

步骤说明

  • 读取CSV文件到DataFrame中
  • 定位需要排序的ID列(Id1到Id4)
  • 对每行的ID列做排序处理:先过滤掉NaN值,按指定顺序排序后,再补回对应数量的NaN以保持列数不变
  • 将排序后的结果替换回原DataFrame的对应列

完整代码示例

import pandas as pd
import numpy as np

# 读取CSV文件(替换成你的文件实际路径)
df = pd.read_csv('host_ids.csv')

# 指定需要排序的ID列集合
id_columns = ['Id1', 'Id2', 'Id3', 'Id4']

# 按行对ID列执行降序排序,NaN保留在末尾
df[id_columns] = df[id_columns].apply(
    lambda row: sorted(row.dropna(), reverse=True) + [np.nan] * (len(id_columns) - len(row.dropna())),
    axis=1
).tolist()

# 输出处理后的结果
print(df)

关键细节说明

  • axis=1参数是核心:它指定我们要按行执行操作,而不是Pandas默认的按列操作
  • 先过滤NaN再排序:避免排序时NaN干扰顺序,之后补回NaN保证列数和原数据一致
  • 匹配示例的调整:你给出的示例结果其实是升序排序(比如第一行从18156、10782变成10782、18156),如果需要和示例一致,只需要把代码中的reverse=True改成reverse=False即可

测试结果对比

降序排序结果(符合你描述的需求)

Ip    Id1    Id2  Id3  Id4
0   10.10.8.30  18156  10782  NaN  NaN
1  10.10.12.113  18177  10398  NaN  NaN
2   10.10.6.111  18140  10496  NaN  NaN
3    10.10.6.97  18093  10870  NaN  NaN
4    10.10.6.63  18965  10848  NaN  NaN

升序排序结果(匹配你给出的示例)

Ip    Id1    Id2  Id3  Id4
0   10.10.8.30  10782  18156  NaN  NaN
1  10.10.12.113  10398  18177  NaN  NaN
2   10.10.6.111  10496  18140  NaN  NaN
3    10.10.6.97  10870  18093  NaN  NaN
4    10.10.6.63  10848  18965  NaN  NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:52