在指定数量的列中,查找每行中具有前3个最大值的列

  • 本文关键字:最大值 3个 查找 python pandas
  • 更新时间 :
  • 英文 :


我希望在DataFrame中为每行找到3个最大值,但只能从某些列中找到(即,我的DataFrame中总共有10列,但我只希望它在计算最大值时考虑6列(。当找到3个最大的时

我想在现有的DataFrame中创建三个新列,称为"Top 1"、"Top 2"one_answers"Top 3"。我在Python中使用Pandas。

这是我的代码:

df_2 = pd.DataFrame(
df_1.apply(
lambda x: list(
df_1.columns[np.array(x).argsort()[::-1][:3]]
), axis=1
).to_list(), columns=['Top1', 'Top2', 'Top3']
)

我收到一条错误消息,因为当我只想查看列['t1', 't2', 't3', 't4', 't5', 't6']时,此代码会考虑我的整个数据集。我将在代码中的何处输入此规范?

为了提高性能,不要使用apply,因为引擎盖下的循环:

cols = ['t1', 't2', 't3', 't4', 't5', 't6']
df = pd.DataFrame(np.array(cols)[np.argsort(-df[cols].to_numpy(), axis=1)[:, :3]], 
columns=['Top1', 'Top2', 'Top3'])
print (df)

尝试通过列表理解、Dataframe()方法和nlargest()方法:

col= ['t1', 't2', 't3', 't4', 't5', 't6']
out=pd.DataFrame([df[x].nlargest(3) for x in col])

稍微修改一下你的方法:

df_2 = pd.DataFrame(
df_1[col].apply(
lambda x: list(
df_1.columns[np.array(x).argsort()[::-1][:3]]
), axis=1
).to_list(), columns=['Top1', 'Top2', 'Top3']
)

最新更新