pandas 相邻列中的Python数据清理

0h4hbjxa  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(98)

我有一个框架,其中“类型”列中的某些值不正确:
| ID|类型|其他数据|
| --|--|--|
| ABC|十点| 56 |
| ABC|十点| 34 |
| ABC| 0.0| 78 |
| DEF| 20.0| 45 |
| DEF| 0.0| 23 |
| ZWS| 20.0| 99 |
| TYH|十点| 12 |
| TYH|十点| 63 |
| FCE| 0.0| 56 |
| FCE| 20.0| 78 |
| XSA|十点| 74 |
| 红色|0.0| 55 |
| QWA| 20.0| 74 |
我想遍历每个ID,并确定Type是否等于0.0,然后将其替换为同一ID具有0.0以外的值的行中的值。如果没有其他行的ID,并且类型列中的值为0.0,则将其更改为Nan或99,以便稍后删除。
结果将是:第3行的ABC更改为第5行的10.0 DEF更改为第9行的20.0 FCE更改为第12行的20.0 RED更改为Nan或99,因为未找到等效匹配。
解决这个问题的最佳方法是什么?
我尝试过构建字典和循环,但我总是在replace 0.0中卡住等价键的值。

roejwanj

roejwanj1#

您可以使用布尔掩码隐藏等于0的行,然后按Type分组,并将最大值(NaN以外的任何值)广播到所有行:

m = df['Type'].eq(0)  # boolean mask
df['New Type'] = df['Type'].mask(m).groupby(df['ID']).transform('max')
print(df)

# Output
     ID  Type  Other Data  New Type
0   ABC  10.0          56      10.0
1   ABC  10.0          34      10.0
2   ABC   0.0          78      10.0  # 0.0 -> 10.0
3   DEF  20.0          45      20.0
4   DEF   0.0          23      20.0  # 0.0 -> 20.0
5   ZWS  20.0          99      20.0
6   TYH  10.0          12      10.0
7   TYH  10.0          63      10.0
8   FCE   0.0          56      20.0  # 0.0 -> 20.0
9   FCE  20.0          78      20.0
10  XSA  10.0          74      10.0
11  RED   0.0          55       NaN  # 0.0 -> NaN
12  QWA  20.0          74      20.0

字符串

相关问题