2016-05-05 9 views
2

同一の行と列を持ちながら異なる値を持つ2つのpandasデータフレームがあり、1つのデータフレームの各行から最大値を使用して、他のデータフレーム内の位置。例えばPandasデータベースの最大値が別のデータフレーム内の対応する値を返す

:私は 'B.max(軸= 1)' とBの最大値を取得することができます

 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 

、私は戻りたい:

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']) 

のような何かを与えますあなたはAGを比較するeqを使用することができます

d1 2 
d2 3 
d3 6 

答えて

0

OK:Aから対応する値が、私のようなものを探していますmax値ainstと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 
+0

を私はこれは私が後だったものであるかわかりません。多分私ははっきりしていなかったでしょう。私は、Bで見つかった各行の最大数を使用して、データフレーム内の同じ対応する位置にあるAからの生の数値を返します。したがって、(d1、s3)がBのd1行の最大値であれば、Aの(d1、s3)が返されて2になります。 – HenryB

+0

A [B == B.max(axis = 1 )] '? – EdChum

+0

OKが更新しました – EdChum

関連する問題