如何基于含NaN值的Series对DataFrame排序并保留行结构?
按含NaN的Series排序DataFrame并保留所有行
你需要根据包含NaN且行数多于原DataFrame的Series对DataFrame排序,同时保留Series的所有行(对应NaN行的列填充NaN),以保证后续横向合并时行数一致。原代码使用loc会丢失NaN行,以下是简洁的解决方法:
最优简洁方案
直接用reindex替代loc,一行代码完成:
df_1 = df_1.set_index('Number').reindex(series_2).reset_index()
原理说明
set_index('Number'):将DataFrame的索引设置为排序依据的Number列reindex(series_2):严格按照series_2的顺序和所有元素(包括NaN)重新排列DataFrame,不存在的索引项对应的列自动填充NaNreset_index():将索引重新转为普通列,恢复原DataFrame的结构
备选方案(灵活合并场景)
如果需要更灵活的合并逻辑,可使用merge方法:
# 将Series转为带列名的DataFrame series_df = series_2.to_frame(name='Number') # 左连接保留Series的所有行,匹配不到的填充NaN result = series_df.merge(df_1, on='Number', how='left')
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

