我有两个数据帧df_diff和df_three。对于df_three的每一列,它包含df_diff的每一列中三个最大值的索引值。例如,假设df_diff看起来像这样:
A B C
0 4 7 8
1 5 5 7
2 8 2 1
3 10 3 4
4 1 12 3
使用
df_three = df_diff.apply(lambda s: pd.Series(s.nlargest(3).index))
df_three看起来像这样:
A B C
0 3 4 0
1 2 0 1
2 1 1 3
如何将df_three中的索引值与df_diff的列值匹配?
换句话说,如何让df_three变成这样:
A B C
0 10 12 8
1 8 7 7
2 5 5 4
我使这个问题变得太复杂了吗?有没有更简单的方法?
任何帮助表示赞赏!
答案 0 :(得分:0)
def top_3(s, top_values):
res = s.sort_values(ascending=False)[:top_values]
res.index = range(top_values)
return res
res = df.apply(lambda x: top_3(x, 3))
print(res)
答案 1 :(得分:0)
对数据帧值使用numpy.sort
:
n=3
arr = df.copy().to_numpy()
df_three = pd.DataFrame(np.sort(arr, 0)[::-1][:n], columns=df.columns)
print(df_three)
A B C
0 10 12 8
1 8 7 7
2 5 5 4