如何将DataFrame中非NA值按行左移至首个空列?
Pandas 实现每行非NA值左移填补左侧空缺
示例DataFrame构造
先还原你给出的示例数据:
import pandas as pd import numpy as np df = pd.DataFrame({ 'A1': ['Abc', 'Cde', np.nan], 'A2': [np.nan, np.nan, 'Pqr'], 'A3': ['Xyz', np.nan, np.nan], 'A4': [np.nan, 'Mno', 'Stu'], 'A5': [123, 756, 0], 'A6': [123, 888, 0] })
非循环解决方案
直接用apply结合dropna实现矢量化处理,无需手动循环:
# 按行处理:移除NA后重新排列,再对齐原列数 df_shifted = df.apply(lambda row: pd.Series(row.dropna().values), axis=1) # 恢复原列名 df_shifted.columns = df.columns # 补全缺失的列(非NA值不足时自动填NA) df_shifted = df_shifted.reindex(columns=df.columns)
处理后结果
| A1 | A2 | A3 | A4 | A5 | A6 |
|---|---|---|---|---|---|
| Abc | Xyz | 123 | 123 | NA | NA |
| Cde | Mno | 756 | 888 | NA | NA |
| Pqr | Stu | 0 | 0 | NA | NA |
说明
这种方法利用pandas内置的矢量化操作,比手动遍历每行的循环效率高得多,尤其适合处理大体积的DataFrame。row.dropna()会保留该行非NA值的原始顺序,转成Series后自动左对齐,最后通过reindex补全原列数,空缺位置填充NA。
内容的提问来源于stack exchange,提问作者alf001
相关产品推荐
相关产品推荐

