熊猫将值与具有过滤条件的前一行进行比较

我有一个包含员工工资信息的 DataFrame。它大约有 900000+ 行。


样本:


+----+-------------+---------------+----------+

|    |   table_num | name          |   salary |

|----+-------------+---------------+----------|

|  0 |      001234 | John Johnson  |     1200 |

|  1 |      001234 | John Johnson  |     1000 |

|  2 |      001235 | John Johnson  |     1000 |

|  3 |      001235 | John Johnson  |     1200 |

|  4 |      001235 | John Johnson  |     1000 |

|  5 |      001235 | Steve Stevens |     1000 |

|  6 |      001236 | Steve Stevens |     1200 |

|  7 |      001236 | Steve Stevens |     1200 |

|  8 |      001236 | Steve Stevens |     1200 |

+----+-------------+---------------+----------+

数据类型:


table_num: string

name: string

salary: float

我需要添加一列有关增加\减少工资水平的信息。我正在使用该shift()函数来比较行中的值。


主要问题在于对整个数据集的所有唯一员工进行过滤和迭代。


在我的脚本中大约需要 3 个半小时。


怎么做比较快?


蝴蝶不菲
浏览 154回答 3
3回答

弑天下

使用groupby连同diff:df['inc']&nbsp;=&nbsp;df.groupby(['table_num',&nbsp;'name'])['salary'].diff().fillna(0.0) df.loc[df['inc']&nbsp;>&nbsp;0.0,&nbsp;'inc']&nbsp;=&nbsp;1.0 df.loc[df['inc']&nbsp;<&nbsp;0.0,&nbsp;'inc']&nbsp;=&nbsp;-1.0

喵喔喔

使用DataFrameGroupBy.diffwithnumpy.sign和 last cast to&nbsp;integers:df['new'] = np.sign(df.groupby(['table_num', 'name'])['salary'].diff().fillna(0)).astype(int)print (df)&nbsp; &nbsp;table_num&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name&nbsp; salary&nbsp; new0&nbsp; &nbsp; &nbsp; &nbsp;1234&nbsp; &nbsp;John Johnson&nbsp; &nbsp; 1200&nbsp; &nbsp; 01&nbsp; &nbsp; &nbsp; &nbsp;1234&nbsp; &nbsp;John Johnson&nbsp; &nbsp; 1000&nbsp; &nbsp;-12&nbsp; &nbsp; &nbsp; &nbsp;1235&nbsp; &nbsp;John Johnson&nbsp; &nbsp; 1000&nbsp; &nbsp; 03&nbsp; &nbsp; &nbsp; &nbsp;1235&nbsp; &nbsp;John Johnson&nbsp; &nbsp; 1200&nbsp; &nbsp; 14&nbsp; &nbsp; &nbsp; &nbsp;1235&nbsp; &nbsp;John Johnson&nbsp; &nbsp; 1000&nbsp; &nbsp;-15&nbsp; &nbsp; &nbsp; &nbsp;1235&nbsp; Steve Stevens&nbsp; &nbsp; 1000&nbsp; &nbsp; 06&nbsp; &nbsp; &nbsp; &nbsp;1236&nbsp; Steve Stevens&nbsp; &nbsp; 1200&nbsp; &nbsp; 07&nbsp; &nbsp; &nbsp; &nbsp;1236&nbsp; Steve Stevens&nbsp; &nbsp; 1200&nbsp; &nbsp; 08&nbsp; &nbsp; &nbsp; &nbsp;1236&nbsp; Steve Stevens&nbsp; &nbsp; 1200&nbsp; &nbsp; 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python