首页 > 解决方案 > 条件变量值是否相同不同年份,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)

标签: pythonpandasif-statement

解决方案


对于不使用 lambda 函数的更有效的解决方案,应该更快地比较每个组的值,例如firstlast

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

推荐阅读