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

如何重排Dataframe保留跨行匹配值,其余位置填充为NaN

Pandas DataFrame 按全局唯一值重排实现方法

核心实现逻辑:每行对应原DataFrame的一个全局唯一值,若某列包含当前行对应的唯一值则填该值,其余位置填充NaN。

完整实现代码

import pandas as pd
import numpy as np

# 构造输入DataFrame
df = pd.DataFrame({
    'A': [1, 5, 9],
    'B': [2, 6, 1],
    'C': [3, 1, 2],
    'D': [4, 8, 6]
})

# 按列优先顺序提取全局唯一值,匹配示例输出的行顺序
unique_vals = []
seen = set()
for col in df.columns:
    for val in df[col]:
        if val not in seen:
            seen.add(val)
            unique_vals.append(val)

# 逐行生成结果
res_list = []
for current_val in unique_vals:
    row_data = {}
    for col_name in df.columns:
        row_data[col_name] = current_val if current_val in df[col_name].values else np.nan
    res_list.append(row_data)

# 转换为DataFrame格式
result_df = pd.DataFrame(res_list)
print(result_df)

输出结果

运行上述代码得到的输出和预期完全一致:

A    B    C    D
0  1.0  1.0  1.0  NaN
1  5.0  NaN  NaN  NaN
2  9.0  NaN  NaN  NaN
3  NaN  2.0  2.0  NaN
4  NaN  6.0  NaN  6.0
5  NaN  NaN  3.0  NaN
6  NaN  NaN  NaN  4.0
7  NaN  NaN  NaN  8.0

如果不需要严格匹配示例的行顺序,可将提取唯一值的部分简化为 unique_vals = sorted(pd.unique(df.values.ravel())),即可得到按数值大小排序的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:54:02