python-3.x - 根据 Pandas 中其他列的对应值替换列值
问题描述
我正在尝试根据列替换列的值。例如col1在前 5 行中具有值,而col2具有值,因此根据 col2 更新 col1 值。
接下来的五行 col1 中没有值,但 col2 有值只是跳过这些行不需要更新 col1,依此类推。
df9["col1"].replace(["s1"], "data_value", inplace=True)
我使用了Replacing some values in a pandas dataframe column with another value 中的此代码行。它给我的输出只是用数据值替换值,而不是用数据值列中的值替换。
数据框
col1 col2 col3 col4
0 s1 NaN NaN NaN
1 s1 NaN NaN NaN
2 s1 NaN NaN NaN
3 s1 NaN NaN NaN
4 s1 NaN NaN NaN
5 NaN s2 NaN NaN
6 NaN s2 NaN NaN
7 NaN s2 NaN NaN
8 NaN s2 NaN NaN
9 NaN s2 NaN NaN
10 NaN NaN ss1 NaN
11 NaN NaN ss1 NaN
12 NaN NaN ss1 NaN
13 NaN NaN ss1 NaN
14 NaN NaN ss1 NaN
15 NaN NaN NaN ss333
16 NaN NaN NaN ss333
17 NaN NaN NaN ss333
18 NaN NaN NaN ss333
19 NaN NaN NaN ss333
期望的输出:
col1 col2 col3 col4
0 0 NaN NaN NaN
1 0 NaN NaN NaN
2 0 NaN NaN NaN
3 0 NaN NaN NaN
4 0 NaN NaN NaN
5 NaN 0 NaN NaN
6 NaN 0 NaN NaN
7 NaN 0 NaN NaN
8 NaN 0 NaN NaN
9 NaN 0 NaN NaN
10 NaN NaN 500 NaN
11 NaN NaN 500 NaN
12 NaN NaN 500 NaN
13 NaN NaN 500 NaN
14 NaN NaN 500 NaN
15 NaN NaN NaN 500
16 NaN NaN NaN 500
17 NaN NaN NaN 500
18 NaN NaN NaN 500
19 NaN NaN NaN 500
解决方案
df = pd.DataFrame({
'A':[4,5] + [np.nan] * 4,
'B':[np.nan,np.nan,9,4,np.nan,np.nan],
'C':[np.nan] * 4 + [7,0],
'Data':list('aaabbb')
})
print (df)
A B C Data
0 4.0 NaN NaN a
1 5.0 NaN NaN a
2 NaN 9.0 NaN a
3 NaN 4.0 NaN b
4 NaN NaN 7.0 b
5 NaN NaN 0.0 b
df = df.mask(df.notnull(), df.pop('Data'), axis=0)
print (df)
A B C
0 a NaN NaN
1 a NaN NaN
2 NaN a NaN
3 NaN b NaN
4 NaN NaN b
5 NaN NaN b
推荐阅读
- javascript - Nodejs 只接受几个请求
- python - TypeError:无法确定关系的真值
- python - 将嵌套列表解压缩到字典中
- javascript - 如何解决 responseJSON: {error: "invalid_request", error_description: "Missing required parameter: code"}
- javascript - 插入多行物料表
- r - 如何在 R 中对稀疏矩阵进行交叉制表?
- java - 将数据库异常信息传输到客户端的最佳实践
- spring-boot - 如何避免 Spring 框架中的 CustomConversions 警告
- kubernetes - 为什么当我查询正在运行的 Pod 时,kubectl 返回具有“Terminating”状态的 Pod?
- visual-studio - 如何在 VS2019 中静态链接 OpenSSL 库?