2017-04-18 5 views
1

ich einen Datenrahmen in Pandas haben, relation_between_countries:zu Erhalten Unterschied zwischen Beziehungen

country_from country_to points 
1 Albania  Austria  10 
2 Denmark  Austria  5 
3 Austria  Albania  2 
4 Greece   Norway  4 
5 Norway   Greece  5 

Ich versuche, den Unterschied zwischen den Punkten der Beziehungen, da dies zu erhalten:

country_from_or_to country_to_or_from difference 
Albania    Austria    8 
Denmark    Austria    
Greece    Norway    -1 

Haben Sie Haben Sie irgendwelche Ideen, wie es geht?

Antwort

5

Verwendung DataFrameGroupBy.diff:

cols = ['country_from','country_to'] 
#sort values in columns 
df[cols] = df[cols].apply(sorted, axis=1) 
#get difference 
df['difference'] = df.groupby(cols)['points'].diff(-1) 
print (df) 
    country_from country_to points difference 
1  Albania Austria  10   8.0 
2  Austria Denmark  5   NaN 
3  Albania Austria  2   NaN 
4  Greece  Norway  4  -1.0 
5  Greece  Norway  5   NaN 

Ebenfalls möglich ist NaN zu leeren Raum ersetzen, sondern gemischte Werte in Spalte bekommen - numerisch mit Streichern, so können einige Funktion seltsame Ausgänge zurück:

cols = ['country_from','country_to'] 
df[cols] = df[cols].apply(sorted, axis=1) 
df['difference'] = df.groupby(cols)['points'].diff(-1).fillna('') 
print (df) 
    country_from country_to points difference 
1  Albania Austria  10   8 
2  Austria Denmark  5   
3  Albania Austria  2   
4  Greece  Norway  4   -1 
5  Greece  Norway  5   
+0

Vielen Dank , @jezrael! – Kristoffer

+0

Gute Antwort, gute Erklärung! – piRSquared

Verwandte Themen