我试图弄清楚如何在Pandas中的行之间做出条件差异。例如,在下表中,如果我只从标题和数字列开始,我想创建一个diff列,它在当前行和前一行之间的数字列中有所不同,但仅限于当前行中的标题与前一行相同。如果不是,我想把它留空,或用空填充等等
我知道如何通过
创建diff列df.['title']=df.['number'].diff(1)
但这会让我在不同的标题之间留下毫无意义的差异
这就是我想要完成的事情:
| title | number | diff |
|-------|--------|------|
| a | 4 | NaN |
| a | 10 | 6 |
| a | 13 | 3 |
| b | 5 | NaN |
| b | 7 | 2 |
答案 0 :(得分:4)
使用groupby
:
df.assign(diff=df.groupby('title')['number'].diff())
输出:
title number diff
0 a 4 NaN
1 a 10 6.0
2 a 13 3.0
3 b 5 NaN
4 b 7 2.0
答案 1 :(得分:3)
如果您的title
列已经分组。如果它不是排序第一。排序将稳定并保留行顺序。
df.assign(
Diff=df.number.diff().where(
df.title.duplicated()
)
)