如何对Pandas生成的表格按指定列实现数据对齐?
解决方案
要实现将每列非空值向上对齐、空值移至列尾的效果,可以通过对DataFrame的每一列重新排序元素来完成:
方法一:自定义函数处理
import pandas as pd # 原始数据生成 df1 = pd.DataFrame({"A": ['a','b','c','d']}) df2 = pd.DataFrame({"B": ['','c','a','']}) df3 = pd.DataFrame({"C": ['','','d','']}) df = pd.concat([df1, df2, df3], axis=1) # 定义非空值上移的函数 def shift_non_empty_up(column): # 提取列中的非空值 non_empty_vals = column[column != ''].tolist() # 计算需要补充的空值数量 empty_num = len(column) - len(non_empty_vals) # 返回重新排列后的列:非空值在前,空值在后 return pd.Series(non_empty_vals + [''] * empty_num) # 应用函数到所有列 df_aligned = df.apply(shift_non_empty_up, axis=0) print(df_aligned)
方法二:简洁Lambda写法
如果不想定义单独函数,可以用一行Lambda表达式实现:
df_aligned = df.apply(lambda col: pd.Series(col[col != ''].tolist() + ['']*(len(col)-len(col[col != '']))), axis=0)
注意事项
如果你的空值是NaN而非空字符串'',只需将代码中的col != ''替换为col.notna()即可适配。
执行后得到的结果即为目标对齐效果:
A B C 0 a c d 1 b a 2 c 3 d
内容的提问来源于stack exchange,提问作者pythonleaner
相关产品推荐
相关产品推荐

