python - 条件变量值是否相同不同年份,Python/Pandas。最快的解决方案?
问题描述
我有一个大型数据集(2000 万行)。该数据集包含有关一个人在 2018 年和 2019 年居住的信息。我希望编写一个条件,如果变量“县”在 2018 年和 2019 年具有相同的值,则返回 True,如果两个值不同,则返回 False。什么是最实现这一目标的有效方法?
df=pd.DataFrame({'id': [10, 10, 20, 20, 30, 30, 40, 40], 'year': [2018, 2019, 2018, 2019, 2018, 2019, 2018, 2019],
'county' : ['1', '1', '4', '2', '3', '3', '1', '3']})
我的目标是创建一个新列,其中 id 10 为 True (stayer) 而 id 20 为 False (mover)
解决方案
对于不使用 lambda 函数的更有效的解决方案,应该更快地比较每个组的值,例如first
:last
g = df.groupby(['id'])['county']
df['newcol'] = g.transform('first').eq(g.transform('last'))
print (df)
id year county newcol
0 10 2018 1 True
1 10 2019 1 True
2 20 2018 4 False
3 20 2019 2 False
4 30 2018 3 True
5 30 2019 3 True
6 40 2018 1 False
7 40 2019 3 False
另一个 not groupby 解决方案应该更有效:
s = df.set_index(['id','year'])['county']
df['newcol'] = df['id'].map(s.xs(2018, level=1).eq(s.xs(2019, level=1)))
print (df)
id year county newcol
0 10 2018 1 True
1 10 2019 1 True
2 20 2018 4 False
3 20 2019 2 False
4 30 2018 3 True
5 30 2019 3 True
6 40 2018 1 False
7 40 2019 3 False
推荐阅读
- ios - 带有子视图的 UIPinchGestureRecognizer 问题
- reactjs - 使用反应引导对表列进行排序不起作用
- c - 与 C 指针混淆
- spring - 使 Spring 受益的原则是什么?
- computer-vision - YOLO 和滑动窗口算法的输出向量
- ruby-on-rails - 在 Elastic Beanstalk 上部署时出错 - Rails
- java - 生成带有一些缺失像素的 QR 码
- c# - Microsoft 代理“无法启动”
- r - R - 将 utils::View 重新定义为通用而不与 RStudio 冲突
- html - 如何添加一个覆盖我的主导航标题的粘性标题?