首页 > 解决方案 > 使用 python 合并具有非 NaN 值的多列

问题描述

我有 3 个具有相同格式和列的数据框,每个数据框都有一个列标准 1。每个数据框都填充了不同的人,我想将此列的非 NaN 值组合在 3 个数据框中,然后将其存储在 excel 文件中,以便 NaN 在 excel 中为空白值。我怎样才能在 Python 中做到这一点?此外,我想知道是否有至少两个人填写的行?

数据框 1

ID       Criterion 1
1021     10
1022     NaN
1023     NaN
1024     NaN
1025     NaN

数据框 2

ID       Criterion 1
1021     NaN
1022     15
1023     NaN
1024     NaN
1025     NaN

数据框 3

ID       Criterion 1
1021     NaN
1022     NaN
1023     NaN
1024     NaN
1025     34

联合数据框

ID       Criterion 1
1021     10
1022     15
1023     NaN
1024     NaN
1025     34

Excel 文件数据框 1

ID       Criterion 1
1021     10
1022     15
1023     
1024     
1025     34

标签: pythonpandasdataframe

解决方案


Criterion 1想法是引发错误,如果自定义函数中的列的相同 ID 有 2 个或更多值:

def func(dfs):

    dfs = [x.set_index('ID') for x in dfs]

    df = pd.concat([x['Criterion 1'] for x in dfs], 1)
    m = df.count(axis=1).gt(1)
    L = m.index[m].astype(str)
    if m.any():
        raise ValueError(f'For ID(s) {", ".join(L)} are multiple values')

    return df.groupby(axis=1, level=0).first()


df = func([df1, df2, df3])
print (df)
      Criterion 1
ID               
1021         10.0
1022         15.0
1023          NaN
1024          NaN
1025         34.0

最后,将此数据框写入 Excel 文件格式:

df.to_excel(file)

推荐阅读