简体   繁体   中英

Calculate difference of two rows based on another columns entries

I have data frame like this:

Column A Column B
zu 2.5
ab 1
fi 0
zu 2
ab 0.5
fi 0
uv 1
zu 2
ab 1

I need two calculate the difference between "zu" and "ab" and position it on a new column

Column A Column B diff
zu 2.5 1.5
ab 1 0
fi 0 0
zu 2 1.5
ab 0.5 0
fi 0 0
uv 1 0
zu 2 1
ab 1 0

I tried the diff() and shift() Funktion but that didn't work. Do you have any suggestions?

Example Code

data = {'Column A': {0: 'zu', 1: 'ab', 2: 'fi', 3: 'zu', 4: 'ab', 5: 'fi', 6: 'uv', 7: 'zu', 8: 'ab'},
        'Column B': {0: 2.5, 1: 1.0, 2: 0.0, 3: 2.0, 4: 0.5, 5: 0.0, 6: 1.0, 7: 2.0, 8: 1.0}}
df = pd.DataFrame(data)

Code

s = df['Column B'].diff(-1).where(df['Column A'].eq('zu'), 0)

s

0    1.5
1    0.0
2    0.0
3    1.5
4    0.0
5    0.0
6    0.0
7    1.0
8    0.0

make s to diff column

df.assign(diff=s)

output

 Column A   Column B    diff
0   zu      2.5         1.5
1   ab      1.0         0.0
2   fi      0.0         0.0
3   zu      2.0         1.5
4   ab      0.5         0.0
5   fi      0.0         0.0
6   uv      1.0         0.0
7   zu      2.0         1.0
8   ab      1.0         0.0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM