python - 使用 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
解决方案
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)
推荐阅读
- typescript - 如何修复“找不到名称'ClipboardItem'”错误?
- python - 在 Python 中使用 Flask 时线程运行两次?
- java - 编写一个 java 程序,其中包含一个名为 getVowel() 的函数,该函数采用链表
- python - 以指定频率为时间序列数据前向填充某些列
- chocolatey - 我的包不支持 Windows Server(Chocolatey 测试环境):我如何“跳过”安装,所以自动测试不会失败?
- python - cx_Freeze 没有名为“Tkinter”的模块
- python - 访问文件作为 PySpark 驱动程序的参数 - Google Dataproc Jobs
- sql - 您将如何获得 2,3 和 5 个名字的字母并将其与姓氏的 2,3 个字母连接以创建一个名为 LETTERS OF NAME 的新列?
- elasticsearch - 过滤器聚合上的 Bucket_script 聚合未显示结果
- android - 当我在自定义 MotionLayout 中滚动时在 textview 中调整大小