我有2个pandas数据帧具有相同的行和列,但值不同,我试图使用一个数据帧的每一行的最大值,并从另一个数据帧中的相应位置返回值。
例如:
A = DataFrame(np.arange(9).reshape((3, 3)), index=['d1', 'd2', 'd3'], columns=['s1', 's2', 's3'])
B = DataFrame(np.random.randn(3, 3), index=['d1', 'd2', 'd3'], columns=['s1', 's2', 's3'])
给出类似的东西:
s1 s2 s3 s1 s2 s3
d1 0 1 2 d1 -0.02 0.01 0.05
d2 3 4 5 d2 0.01 -0.03 -0.03
d3 6 7 8 d3 0.04 -0.06 0.02
我可以用'B.max(axis = 1)'得到B的最大值,但我想从A中返回相应的值。我正在寻找类似的东西:
d1 2
d2 3
d3 6
答案 0 :(得分:0)
好的,您可以使用eq
与max
值进行比较,并对df A
使用此布尔值掩码:
In [265]:
A = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['d1', 'd2', 'd3'], columns=['s1', 's2', 's3'])
B = pd.DataFrame(np.random.randn(3, 3), index=['d1', 'd2', 'd3'], columns=['s1', 's2', 's3'])
In [271]:
A
Out[271]:
s1 s2 s3
d1 0 1 2
d2 3 4 5
d3 6 7 8
In [272]:
B
Out[272]:
s1 s2 s3
d1 -0.171054 -0.608554 0.168851
d2 -0.514654 -2.281136 1.706951
d3 -1.193330 0.238856 0.770068
In [277]:
A[B.eq(B.max(axis=1), axis=0)]
Out[277]:
s1 s2 s3
d1 NaN NaN 2
d2 NaN NaN 5
d3 NaN NaN 8
然后您可以在上面获得行方式最大值:
In [279]:
A[B.eq(B.max(axis=1), axis=0)].max(axis=1)
Out[279]:
d1 2.0
d2 5.0
d3 8.0
dtype: float64