首页 > 解决方案 > 一种矢量化方法,用于在 pandas 数据框中创建一个新列,其值来自另一列但不是同一行

问题描述

我需要根据与另一列的匹配条件,从一列的现有值创建一个新列。但是要填充的值可能来自同一行,也可能不来自同一行。

我已经用嵌套的 for 循环实现了这一点,但是在大型数据集上它需要很多时间。那么是否有一些内置函数可以利用 pandas 的 vetorizing 属性?

我的数据集如下所示:

    a     b
32  m   1.5
33  n   1.6
34  o   1.7
35  m   1.8
36  n   2.2
37  m   2.4
38  n   2.9
39  o   2.1
40  p   1.5

如果m在 column 中遇到 ,则将 columna中的值b复制到新列中,直到m遇到 的新实例。并且值被更新。所以输出应该是这样的:

    a     b     c
32  m   1.5   1.5
33  n   1.6   1.5
34  o   1.7   1.5
35  m   1.8   1.8
36  n   2.2   1.8
37  m   2.4   2.4
38  n   2.9   2.4
39  o   2.1   2.4
40  p   1.5   2.4

标签: python-3.xdatabasepandasdataframe

解决方案


用于Series.where替换由Series.eqfor测试的不匹配值,并通过以下==方式前向填充缺失值ffill

df['c'] = df['b'].where(df['a'].eq('m')).ffill()
print (df)
    a    b    c
32  m  1.5  1.5
33  n  1.6  1.5
34  o  1.7  1.5
35  m  1.8  1.8
36  n  2.2  1.8
37  m  2.4  2.4
38  n  2.9  2.4
39  o  2.1  2.4
40  p  1.5  2.4

推荐阅读