2017-10-24 4 views
0

Lasst uns sagen, dass ich die folgende Datenrahmen haben:Funktion Spalte in Pandas Nehmen je nach Zeilenwert

date,id,value 
1/1/2017,5,300 
1/1/2017,51,300 
1/1/2017,54,300 
1/2/2017,5,100 
1/2/2017,51,100 
1/2/2017,54,100 

und ich habe ein Wörterbuch Mapping id zu einem Anpassungsfaktor als solche:

{5: 20, 51: 23.5, 54:10} 

I wollen add der Faktor entsprechend der id zu der value Spalte in meinem Dataframe, was zu:

date,id,value,adjusted_value 
1/1/2017,5,300,300+20=320 
1/1/2017,51,310,310+23.5=333.5 
1/1/2017,54,320,320+10=330 
1/2/2017,5,110,110+20=130 
1/2/2017,51,120,120+23.5=143.5 
1/2/2017,54,130,130+10=140 

Gibt es einen einfachen Weg, dies zu tun?

Antwort

1

Ich glaube, Sie suchen nach nGruppe, cumcount und Kartierung d.h

x = df.groupby('date') 
d = {5: 20, 51: 23.5, 54: 10} 
df['new'] = (x.cumcount()+x.ngroup())*10 +df['id'].map(d)+df['value'] 

Ausgang:

 
     date id value new 
0 1/1/2017 5 300 320.0 
1 1/1/2017 51 300 333.5 
2 1/1/2017 54 300 330.0 
3 1/2/2017 5 100 130.0 
4 1/2/2017 51 100 143.5 
5 1/2/2017 54 100 140.0 

Erklärung

(x.cumcount()+x.ngroup() 
 
0 0 
1 1 
2 2 
3 1 
4 2 
5 3 
(x.cumcount()+x.ngroup())*10 +df['value'] 
 
0 300 
1 310 
2 320 
3 110 
4 120 
5 130 
dtype: int64 
0

One-Liner:

df['adjusted_value'] = df.apply(lambda x: dictionary[x['id']] + x['value'] , axis=1) 

Wortreicher:

df['adjusted_value'] = [dictionary[i] for i in df['id']] 
df['adjusted_value'] = df['adjusted_value'] + df['value'] 
Verwandte Themen