它是pandas/Dataframe,对于每一行,我只想保留前N(N=3)个值,并将其他值设置为nan
import pandas as pd
import numpy as np
data = np.array([['','day1','day2','day3','day4','day5'],
['larry',1,4,4,3,5],
['gunnar',2,-1,3,4,4],
['tin',-2,5,5, 6,7]])
df = pd.DataFrame(data=data[1:,1:],
index=data[1:,0],
columns=data[0,1:])
print(df)
输出为
day1 day2 day3 day4 day5
larry 1 4 4 3 5
gunnar 2 -1 3 4 4
tin -2 5 5 6 7
我想去
day1 day2 day3 day4 day5
larry NaN 4 4 NaN 5
gunnar NaN NaN 3 4 4
tin NaN 5 NaN 6 7
与pandas: Keep only top n values and set others to 0类似,但我只需要保留N个最高可用值,否则平均值不正确
对于上面的结果,我只想保留第一个5
您可以使用
np.unique
对第五大值进行排序和查找,并使用where
:输出:
更新:再看一眼,我想你可以做到:
输出:
这里是另一种使用
df.rank
onaxis=1
的方法,我们反转列并计算秩,因为在重复的列上,您希望保留第一个值然而,正如@Allolz正确指出的,对于基于df形状的一般用例,可以使用:
要为每行保留可使用的前3个值,请执行以下操作:
如果需要,可以将
nlargest
的参数迁移到变量中输出:
相关问题 更多 >
编程相关推荐