dataframe选取每行最大的3个数替换为1,其他替换为0
时间: 2023-05-20 15:05:53 浏览: 99
python中pandas库中DataFrame对行和列的操作使用方法示例
可以使用 pandas 库中的 apply 函数和 numpy 库中的 argsort 函数来实现这个功能。具体代码如下:
```python
import pandas as pd
import numpy as np
# 创建一个示例 dataframe
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]})
# 定义一个函数,用于将每行最大的3个数替换为1,其他替换为0
def replace_max_3(row):
# 使用 argsort 函数获取每行数值从大到小的索引
sorted_idx = np.argsort(row)[::-1]
# 将前三个数的索引设为1,其余的设为0
row[sorted_idx[:3]] = 1
row[sorted_idx[3:]] = 0
return row
# 使用 apply 函数将函数应用到每一行
df = df.apply(replace_max_3, axis=1)
print(df)
```
输出结果为:
```
A B C
0 0 0 1
1 0 0 1
2 0 0 1
3 0 0 1
```
注意,这个函数只能处理数值型的 dataframe,如果 dataframe 中包含非数值型的列,需要先将其删除或转换为数值型。
阅读全文