有没有一种方法可以遍历Pandas中的一列以从另一个数据帧中找到匹配的索引值?

时间:2019-07-02 04:37:16

标签: python pandas indexing

我有两个数据帧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

我使这个问题变得太复杂了吗?有没有更简单的方法?
任何帮助表示赞赏!

2 个答案:

答案 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