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

Pandas中每行两列值去重排序并忽略NaN的实现求助

解决方案

可以通过apply逐行处理DataFrame,结合过滤缺失值、去重、排序和字符串拼接来实现需求:

import pandas as pd

# 示例数据
data = {'A': ['1','2','8','4',pd.NA],
        'B': ['6','2','3','9','10']}
df = pd.DataFrame(data)

# 定义处理函数
def get_sorted_unique(row):
    # 提取当前行的A、B值,过滤缺失值
    valid_vals = [val for val in [row['A'], row['B']] if pd.notna(val)]
    # 去重后排序,再拼接为逗号分隔的字符串
    return ', '.join(sorted(set(valid_vals)))

# 生成目标列
df['expected_col'] = df.apply(get_sorted_unique, axis=1)

print(df)

运行后输出:

A   B expected_col
0    1   6        1, 6
1    2   2            2
2    8   3        3, 8
3    4   9        4, 9
4  NaN  10           10

关键步骤说明

  1. 过滤缺失值:用列表推导式筛选出A和B中不为NaN的值
  2. 去重:通过set()对有效值去重(每行仅两个值,去重效率极高)
  3. 排序:sorted()默认按字符串字典序排序,若需按数值排序,可修改为:
    sorted(set(valid_vals), key=int)
    
  4. 字符串拼接:用', '.join()将排序后的列表转为指定格式的字符串

如果追求简洁,也可以用lambda表达式一行实现:

df['expected_col'] = df.apply(
    lambda r: ', '.join(sorted(set([v for v in [r['A'], r['B']] if pd.notna(v)]))),
    axis=1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:45:39