2016-07-06 8 views
1

Ich habe den folgenden Pandas DataFrame.Wie finden Sie den Unterschied, Mittelwert, Summe zwischen allen Paaren von Zeilen in Pandas Dataframe?

import pandas as pd 
df = pd.read_csv('filename.csv') 

print(df) 

    dog  A   B   C 
0  dog1 0.787575 0.159330 0.053095 
1  dog10 0.770698 0.169487 0.059815 
2  dog11 0.792689 0.152043 0.055268 
3  dog12 0.785066 0.160361 0.054573 
4  dog13 0.795455 0.150464 0.054081 
5  dog14 0.794873 0.150700 0.054426 
.. .... 
8  dog19 0.811585 0.140207 0.048208 
9  dog2 0.797202 0.152033 0.050765 
10 dog20 0.801607 0.145137 0.053256 
11 dog21 0.792689 0.152043 0.055268 
    .... 

Ich will die absolute Differenz von A zwischen allen Zeilen finden. Wie macht man das (wenn man bedenkt, dass die Daten sehr schnell wachsen)?

Eine Möglichkeit, die Daten „Paar“, um zu versuchen:

df1 = df.set_index("dog") 

from itertools import combinations 
cc = list(combinations(df,2)) 

out = pd.DataFrame([df1.loc[c,:].sum() for c in cc], index=cc) 

Dies ist jedoch nur summiert werden. Wie machen Sie mehrere Operationen?

Antwort

3

Betrachten Sie den folgenden Datenrahmen:

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'Dog': list('ABCDEFG'), 'A': range(7)})[['Dog', 'A']] 
df 

enter image description here

Verwenden numpy die subtract.outer Funktion dann den absoluten Wert nehmen.

df1 = pd.DataFrame(np.abs(np.subtract.outer(df.A, df.A)), df.Dog, df.Dog) 
df1 

enter image description here

eine Liste der Kombination Tupel erhalten:

stacked = df1.stack() 
pd.DataFrame({'Dogs': stacked.index.to_series(), 'Diff': stacked})[['Dogs', 'Diff']].reset_index(drop=True) 

enter image description here

+0

Dank. Wie würden Sie dies in ein "gepaartes Format" bringen, d. H. (Hund A, Hund A) = 0, (Hund A, Hund B) = 1 usw.? – ShanZhengYang

+0

Beitrag wurde aktualisiert – piRSquared

+1

@ShanZhengYang Wenn Sie diese Antwort zufriedenstellend gefunden haben, dann akzeptieren Sie es bitte. Dies wird die Frage als beantwortet markieren und die Leute dazu ermutigen, Ihre zukünftigen Fragen zu beantworten. – limbo

Verwandte Themen