python-3.x - 一种矢量化方法,用于在 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
解决方案
用于Series.where
替换由Series.eq
for测试的不匹配值,并通过以下==
方式前向填充缺失值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