2016-11-21 485 views
3

我有一个pd数据帧。我想要做的是生成一个新的变量,其值是另外两个变量之间的最小值。 例如,假设我有:创建一个新的变量,它是Python中两个变量的最小值

a b 
0 1 0 
1 5 1 
2 7 3 
3 3 5 

我想创建一个新的变量C,看起来像下面这样:

a b c 
0 1 0 0 
1 5 1 1 
2 7 3 3 
3 3 5 3 

我试着写一个循环来做到这一点,但因为我有超过30万次观测,这需要太长时间。 min似乎没有做我想要的。有一个简洁的方法来解决它吗?非常感谢你的帮助!

回答

5

在这种情况下,你可以使用:

df['c'] = df[['a', 'b']].min(axis=1) 

所以你(使用df[['a', 'b']])然后在列,而不是行的值应用min功能子集化所需的列,让你一个系列您可以将其指定为列c

2

下面是与numpy.minimum一种方法 -

df['c'] = np.minimum(df.a,df.b) 

因此,你基本上这两列之间选择的最低值,并创建与新列。

30k observations/rows运行测试 -

In [153]: df = pd.DataFrame(np.random.randint(0,9,(30000,2)),columns=[['a','b']]) 

In [154]: %timeit df['c'] = df[['a', 'b']].min(axis=1) 
100 loops, best of 3: 2.15 ms per loop # @Jon Clements's soln 

In [155]: df = pd.DataFrame(np.random.randint(0,9,(30000,2)),columns=[['a','b']]) 

In [156]: %timeit df['c'] = np.minimum(df.a,df.b) 
1000 loops, best of 3: 602 µs per loop 
+1

只需要两个阵列时效果好很多:) –

相关问题