当我有从多个来源收集数据的数据框架时,我正在寻找如何解决问题的方面。例如,我可以有不同的过滤器,如G、Z、Y,但由于我从多个不同的源收集数据,我可能有多个不同Y列,例如Y1、Y2、Y3。
然后我将计算一个列,它是G-Y。
id | G | Y1 | Y2Y3Y-G|||
---|---|---|---|---|---|
1 | 20 | 空 | -99>0 | NA | |
2 | 15 | 空19 | 0 | 4 | |
3 | 17 | 18 | -9919 | <1>||
4 | 19 | -99 | 0 | 0
您可以使用一个简单的替换来执行数据清理步骤:
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