基于条件的pandas行算法

时间:2017-09-19 03:28:54

标签: python pandas

我试图弄清楚如何在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    |

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()
    )
)