创建一个新变量,它是Python中两个变量的最小值

时间:2016-11-21 17:38:45

标签: python pandas min

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

   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

我试着写一个循环去做,但由于我有超过30k的观察,它需要太长时间。 min似乎没有按我的意愿行事。有没有简洁的方法来解决它?非常感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

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

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

因此,您要对所需的列进行子集化(使用df[['a', 'b']]),然后在列的值而不是行中应用min函数,从而为您指定一个可以指定为列{{{ 1}}。

答案 1 :(得分:2)

这是numpy.minimum -

的一种方法
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}}