我有一个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
似乎没有按我的意愿行事。有没有简洁的方法来解决它?非常感谢你的帮助!
答案 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}}