Jupyter notebooks / Pandas dataframe 如何处理具有相似值的多个列

Jupyter notebooks / Pandas dataframe how to deal with multiple columns with similar values

我正在寻找有关如何解决问题的方面,当我有从多个来源收集数据的数据框时。例如,我可以有不同的过滤器,如 G、Z、Y,但因为我从多个不同的来源收集数据,所以我可能有多个不同的 Y 列,例如 Y1、Y2、Y3。

那我就算一列是G-Y

id G Y1 Y2 Y3 Y-G
1 20 null -99 0 NA
2 15 null 19 0 4
3 17 18 -99 19 1
4 19 19 -99 0 0

所以首先可能有多个零值,如 -99、0 或 NULL,所有这些都需要解决。例如,我会 运行 整个文件并将 -99 和 NULL 值变为 0。 但是怎么办?

那么棘手的部分将是在有多个值可用时优先选择正确的 Y 值。例如,如果可用,我想使用 Y1,但如果没有 Y1,我将使用 Y2 或 Y3 来计算 Y-G。 (第 3 行).

你会如何处理这个问题?

您可以通过简单的替换执行数据清理步骤:

cleaned = df.replace(['null', -99, 0], nan).drop(columns=['Y-G'])
   id   G    Y1    Y2    Y3
0   1  20   NaN   NaN   NaN
1   2  15   NaN  19.0   NaN
2   3  17  18.0   NaN  19.0
3   4  19  19.0   NaN   NaN

然后您可以使用跨列的过滤器和回填来获取最早看到的 Y 值。然后获取该输出并从中减去 G 列作为您的计算列:

cleaned['Y-G'] = cleaned.filter(like='Y').bfill(axis=1).iloc[:, 0] - cleaned['G']

print(cleaned)
   id   G    Y1    Y2    Y3  Y-G
0   1  20   NaN   NaN   NaN  NaN
1   2  15   NaN  19.0   NaN  4.0
2   3  17  18.0   NaN  19.0  1.0
3   4  19  19.0   NaN   NaN  0.0