首页 > 解决方案 > 执行矢量化操作时如何在 Pandas 中访问系列的行值

问题描述

我有一个包含数百万行的稀疏/宽数据框,但大致可以这样总结:

d = {
    "year" : [2019, 2020, 2021],
    2018 : [True, True, False],
    2019 : [True, False, False],
    2020 : [False, False, True],
    2021 : [False, False, True]
}
df = pd.DataFrame(d)

我想根据某些条件创建一些额外的布尔列。当我这样做时:

df['consecutive'] = df[df['year']] * df[df['year'] - 1]

我明白了ValueError: Wrong number of items passed 4, placement implies 1

但是当我像这样对年份进行硬编码时:

df['consecutive'] = df[2019] * df[2018]

我得到了预期的结果:

    year    2018    2019    2020    2021    consecutive
0   2019    True    True    False   False   True
1   2020    True    False   False   False   False
2   2021    False   False   True    True    False

我之前在较小数据集上的实现使用 df.apply() 但性能在这里是一个问题,因此矢量化方法很重要。非常感谢任何建议!

标签: pythonpandas

解决方案


推荐阅读