Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:基于多个列获取最大的n行,并且它们彼此匹配_Python_Pandas - Fatal编程技术网

Python 熊猫:基于多个列获取最大的n行,并且它们彼此匹配

Python 熊猫:基于多个列获取最大的n行,并且它们彼此匹配,python,pandas,Python,Pandas,假设我有这样的数据帧。C列和E列中的红色值是相应每列中最高的10个数字 我怎样才能得到这样的数据帧。其中它只返回两列中最高的10行?如果该值在最高的10中,但不在两者中,则该行将被忽略 目前,我通过循环来实现这一点,我首先单独循环每个列,如果值在最高的10中,那么我保存行索引,然后我第三次循环,排除不在这两个列中的索引,这是非常低效的,因为我使用的是一个超过100000行的表。有更好的方法吗?考虑示例数据帧df np.random.seed([3,1415]) rng = np.arange

假设我有这样的数据帧。C列和E列中的红色值是相应每列中最高的10个数字

我怎样才能得到这样的数据帧。其中它只返回两列中最高的10行?如果该值在最高的10中,但不在两者中,则该行将被忽略


目前,我通过循环来实现这一点,我首先单独循环每个列,如果值在最高的10中,那么我保存行索引,然后我第三次循环,排除不在这两个列中的索引,这是非常低效的,因为我使用的是一个超过100000行的表。有更好的方法吗?

考虑示例数据帧
df

np.random.seed([3,1415])
rng = np.arange(10)
df = pd.DataFrame(
    dict(
        A=rng,
        B=list('abcdefghij'),
        C=np.random.permutation(rng),
        D=np.random.permutation(rng)
    )
)

print(df)

   A  B  C  D
0  0  a  9  1
1  1  b  4  3
2  2  c  5  5
3  3  d  1  9
4  4  e  7  4
5  5  f  6  6
6  6  g  8  0
7  7  h  3  2
8  8  i  2  7
9  9  j  0  8
使用
nlargest
识别列表。然后使用
query
过滤
dataframe

n = 5
c_lrgst = df.C.nlargest(n)
d_lrgst = df.D.nlargest(n)

df.query('C in @c_lrgst & D in @d_lrgst')

   A  B  C  D
2  2  c  5  5
5  5  f  6  6

你能在不添加任何图片的情况下复制/粘贴数据吗?