python - Pandas Dataframe 的 Clean 方法将每行中的最低 n 值设置为零
问题描述
我想转换 Pandas Dataframe 的值,以便例如将 3 个最小列设置为零:
row1: 0.21, 0.11, 0.24, 0.52, 0.12
row2: 0.31, 0.01, 0.44, 0.52, 0.52
会成为:
row1: 0.0, 0.0, 0.24, 0.52, 0.0
row2: 0.0, 0.0. 0.0, 0.52, 0.52
我宁愿这样做没有一些循环。
解决方案
我们可以使用where
+ rank
on axis=1
。rank
和将在行内建立排序method='min'
,ascending=False
使得最小值为 1,最大值为 5(行的总长度)。然后我们where
用 rank 替换所有小于 3 的值:
df = df.where(df.rank(axis=1, method='min', ascending=False) < 3, 0)
我们还可以使用相反的条件 withmask
来保留排名高于 3 的值,并将 3 或更低的值替换为 0:
df = df.mask(df.rank(axis=1, method='min', ascending=False) >= 3, 0)
任一选项都会产生df
:
0 1 2 3 4
0 0.0 0.0 0.24 0.52 0.00
1 0.0 0.0 0.00 0.52 0.52
*注意取决于我们可能还想要的期望行为,method='dense'
或者method='first'
这将改变在排名中处理重复值的方式。
设置:
import pandas as pd
df = pd.DataFrame({
0: [0.21, 0.31],
1: [0.11, 0.01],
2: [0.24, 0.44],
3: [0.52, 0.52],
4: [0.12, 0.52]
})
推荐阅读
- javascript - 需要帮助来检索 Javascript 中的谷歌文档信息(我是新手)
- reactjs - 我可以在 React 中使用 MobX 完全摆脱 useCallback 和 useMemo 吗?
- lua - Why the script doesn't work on by line which is I wrote?
- reactjs - 如何在需要 React.Component 的地方使用 StyledComponent?
- php - 如果他们拥有相同的产品,如何将所有用户分组到产品列表中?
- c# - Login session in ASP.NET MVC
- c# - Update all null values in column .netcore console app
- python - how to resize surface elements after resizing window in pygame?
- ios - React Native App not navigating after successful firebase auth
- python - DRF foreign key field is not showing when serializing object