如何将以ID为索引的DataFrame多行合并为单行?
解决方案
你可以用pandas的groupby()方法结合first()(或max())来实现,因为每个ID对应的每一列只会有一个非空值,聚合时会自动提取该值并忽略NaN。
步骤1:构造示例DataFrame(可直接替换为你的数据)
import pandas as pd import numpy as np data = { 'index': [9894, 9894, 9269, 9269, 9269, 8655, 8655, 8618, 8618], 'column_A': [49.99, np.nan, 636.09, np.nan, np.nan, 2861.11, np.nan, 471.09, np.nan], 'column_B': [np.nan, 49.99, np.nan, np.nan, 636.09, np.nan, 2861.11, np.nan, 471.09], 'column_C': [np.nan, np.nan, np.nan, 3536.23, np.nan, np.nan, np.nan, np.nan, np.nan] } df = pd.DataFrame(data).set_index('index')
步骤2:合并同一ID的行
# 两种方法效果一致,任选其一即可 merged_df = df.groupby(df.index).first() # merged_df = df.groupby(df.index).max()
最终结果
运行后merged_df的输出如下:
column_A column_B column_C index 8618 471.09 471.09 NaN 8655 2861.11 2861.11 NaN 9269 636.09 636.09 3536.23 9894 49.99 49.99 NaN
原理:groupby(df.index)按ID索引分组,first()/max()会提取每组中每列的唯一非NaN值(因为每组内每个列仅存在一个有效数值),最终实现每个ID对应一行,所有非空值整合到同一行。
内容的提问来源于stack exchange,提问作者Kareem Rashwan
相关产品推荐
相关产品推荐

