2016-04-13 15 views
2

Ich habe einen Datenrahmen namens pricecomp_df, ich möchte vergleichen den Preis der Spalte "Marktpreis" und jede der anderen Spalten wie "Apfelpreis", "Mangos Preis "," Wassermelonenpreis "aber priorisieren den Unterschied, der auf der Bedingung basiert: (Erste Priorität ist Wassermelonenpreis, Sekunde zu den Mangos und zu dritt für Apfel). Der Eingangsdatenrahmen unten gegeben:Nehmen Sie den Unterschied zwischen zwei Spalten von Pandas Datenrahmen basierend auf Bedingung in Python

code apple price mangoes price watermelon price market price 
0 101   101   NaN    NaN   122 
1 102   123   123    NaN   124 
2 103   NaN   NaN    NaN   123 
3 105   123   167    NaN   154 
4 107   165   NaN    177   176 
5 110   123   NaN    NaN   123 

hier also die erste Reihe hat ihre diff nur Apfel und Marktpreis dann nehmen, aber in der zweiten Reihe, haben wir Apfel, Mangos Preis, so habe ich nur die Differenz nehmen zwischen Marktpreis und Mangopreis. ebenso den Unterschied basierend auf der Prioritätsbedingung. Überspringen Sie auch die Zeilen mit Nan für alle drei Preise. Kann mir jemand helfen?

+0

Kann mir jemand dabei helfen? – User1090

+0

Drei Jahre später habe ich eine Lösung gefunden. Brauchst du es noch @ User1090? – MERose

Antwort

12

Ich hoffe, ich bin nicht zu spät. Die Idee ist, die Unterschiede zu berechnen und sie entsprechend Ihrer Prioritätenliste zu überschreiben.

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'code': [101, 102, 103, 105, 107, 110], 
        'apple price': [101, 123, np.nan, 123, 165, 123], 
        'mangoes price': [np.nan, 123, np.nan, 167, np.nan, np.nan], 
        'watermelon price': [np.nan, np.nan, np.nan, np.nan, 177, np.nan], 
        'market price': [122, 124, 123, 154, 176, 123]}) 

# Calculate difference to apple price 
df['diff'] = df['market price'] - df['apple price'] 
# Overwrite with difference to mangoes price 
df['diff'] = df.apply(lambda x: x['market price'] - x['mangoes price'] if not np.isnan(x['mangoes price']) else x['diff'], axis=1) 
# Overwrite with difference to watermelon price 
df['diff'] = df.apply(lambda x: x['market price'] - x['watermelon price'] if not np.isnan(x['watermelon price']) else x['diff'], axis=1) 

print df 
    apple price code mangoes price market price watermelon price diff 
0   101 101   NaN   122    NaN 21 
1   123 102   123   124    NaN  1 
2   NaN 103   NaN   123    NaN NaN 
3   123 105   167   154    NaN -13 
4   165 107   NaN   176    177 -1 
5   123 110   NaN   123    NaN  0 
Verwandte Themen