2016-05-05 8 views
2

Ich habe 2 Pandas-Datenrahmen mit identischen Zeilen und Spalten aber verschiedenen Werten und ich versuche, den maximalen Wert aus jeder Zeile eines Datenrahmens zu verwenden und den Wert aus dem entsprechenden zurückzugeben Standort im anderen Datenrahmen.Maximale Werte in der Pandas-Datenbank, um entsprechende Werte in einem anderen Datenrahmen zurückzugeben

Zum Beispiel:

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

gibt so etwas wie:

 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 

Ich kann die max Werte von B erhalten mit 'B.Max (Achse = 1)', aber ich will zurückkehren die entsprechenden Werte von A. ich bin auf der Suche nach so etwas wie:

d1 2 
d2 3 
d3 6 

Antwort

0

OK Sie eq ag vergleichen können ainst die max Werte und verwendet diesen boolean Maske gegen 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 

Anschließend können Sie den zeilenweise max auf der oben erhalten:

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

Ich bin nicht sicher, das ist, was ich war nach . Vielleicht war ich nicht klar. Ich möchte die maximalen Zahlen für jede in B gefundene Zeile verwenden und die rohen Zahlen von A zurückgeben, die sich an derselben Stelle im Datenrahmen befinden. Also, wenn (d1, s3) ist das Maximum für die Zeile d1 in B, ich möchte (d1, s3) von A zurückgegeben werden, 2. – HenryB

+0

So wollen Sie 'A [B == B.max (Achse = 1)] '? – EdChum

+0

OK haben aktualisiert – EdChum