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
我正在寻找有关如何解决问题的方面,当我有从多个来源收集数据的数据框时。例如,我可以有不同的过滤器,如 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