In R, wenn ich die Datenrahmen haben:Split Differenz von gegebenen Spalte innerhalb zweireihigen Gruppen
a <- c(1,1,2,2,3,3,4,4);b <- c(1,0,1,0,1,0,1,0); c <- c(1.5,2.5,30,20,100,150,0.7,0.3)
df <- data.frame(a,b,c)
> df
a b c
1 1 1 1.5
2 1 0 2.5
3 2 1 30.0
4 2 0 20.0
5 3 1 100.0
6 3 0 150.0
7 4 1 0.7
8 4 0 0.3
I die Differenz innerhalb von Gruppen in einem vektorisierten Weise aufspalten:
df$d <- ifelse(df$b == 1, (df$c - c(df$c[-1], NA))/2, (df$c - c(NA, df$c[-nrow(df)]))/2)
> df
a b c d
1 1 1 1.5 -0.5
2 1 0 2.5 0.5
3 2 1 30.0 5.0
4 2 0 20.0 -5.0
5 3 1 100.0 -25.0
6 3 0 150.0 25.0
7 4 1 0.7 0.2
8 4 0 0.3 -0.2
Gibt es Ein ähnlicher Weg, um diese Ergebnisse mit dem gleichen Datenrahmen in Pandas zu erreichen?
df = pd.DataFrame({'a': [1,1,2,2,3,3,4,4], 'b': [1,0,1,0,1,0,1,0], 'c': [1.5,2.5,30,20,100,150,0.7,0.3]})
Danke, ich habe gerade versucht, den Code, ich glaube, Sie statt Unter benötigen Rsub aber geniale Lösung – Tony
@Tony danke, ja, habe ich 'rsub' in einem Teil aber nicht der andere. Danke für den Fang. – piRSquared