如何重排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
相关产品推荐
相关产品推荐

