我有一个包含员工工资信息的 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: stringname: stringsalary: float我需要添加一列有关增加\减少工资水平的信息。我正在使用该shift()函数来比较行中的值。主要问题在于对整个数据集的所有唯一员工进行过滤和迭代。在我的脚本中大约需要 3 个半小时。怎么做比较快?
3 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
使用DataFrameGroupBy.diff
withnumpy.sign
和 last cast to integer
s:
df['new'] = np.sign(df.groupby(['table_num', 'name'])['salary'].diff().fillna(0)).astype(int)
print (df)
table_num name salary new
0 1234 John Johnson 1200 0
1 1234 John Johnson 1000 -1
2 1235 John Johnson 1000 0
3 1235 John Johnson 1200 1
4 1235 John Johnson 1000 -1
5 1235 Steve Stevens 1000 0
6 1236 Steve Stevens 1200 0
7 1236 Steve Stevens 1200 0
8 1236 Steve Stevens 1200 0
添加回答
举报
0/150
提交
取消