Pandas基于两个现有变量创建一个新变量

时间:2018-06-14 06:43:03

标签: python pandas

我认为以下代码非常低效。有没有更好的方法在熊猫中进行这种类型的常见重新编码?

df['F'] = 0
df['F'][(df['B'] >=3) & (df['C'] >=4.35)] = 1
df['F'][(df['B'] >=3) & (df['C'] < 4.35)] = 2
df['F'][(df['B'] < 3) & (df['C'] >=4.35)] = 3
df['F'][(df['B'] < 3) & (df['C'] < 4.35)] = 4

2 个答案:

答案 0 :(得分:11)

使用numpy.select并将布尔掩码缓存到变量以获得更好的性能:

m1 = df['B'] >= 3
m2 = df['C'] >= 4.35
m3 = df['C'] < 4.35
m4 = df['B'] < 3

df['F'] = np.select([m1 & m2, m1 & m3, m4 & m2, m4 & m3], [1,2,3,4], default=0)

答案 1 :(得分:3)

在你的具体情况下,你可以利用布尔实际上是整数的事实(False == 0,True == 1)并使用简单的算术:

df['F'] = 1 + (df['C'] < 4.35) + 2 * (df['B'] < 3)

请注意,这会忽略BC列中的所有NaN,这些NaN将被指定为高于您的限制。

相关问题