【问题标题】:Create a new variable which is min values of two variables in Python创建一个新变量,它是 Python 中两个变量的最小值
【发布时间】:2017-04-05 04:49:38
【问题描述】:

我有一个 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 似乎没有做我想做的事。有没有简洁的方法来解决它?非常感谢您的帮助!

【问题讨论】:

    标签: python pandas min


    【解决方案1】:

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

    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
      

      【讨论】:

      • 只需要两个数组时会更好:)
      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 2020-01-18
      • 2022-12-06
      • 1970-01-01
      • 2018-10-22
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多