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