当前位置: 首页 > 面试题库 >

比较熊猫数据框中的两列以创建第三列

子车凯泽
2023-03-14
问题内容

我有以下数据框:

In [25]: df1
Out[25]: 
          a         b
0  0.752072  0.813426
1  0.868841  0.354665
2  0.944651  0.745505
3  0.485834  0.163747
4  0.001487  0.820176
5  0.904039  0.136355
6  0.572265  0.250570
7  0.514955  0.868373
8  0.195440  0.484160
9  0.506443  0.523912

现在,我想创建另一个列,df1['c']其值在df1['a']和之间最大df1['b']。因此,我希望将其作为输出:

In [25]: df1
Out[25]: 
          a         b        c
0  0.752072  0.813426 0.813426
1  0.868841  0.354665 0.868841
2  0.944651  0.745505 0.944651
3  0.485834  0.163747 0.485834
4  0.001487  0.820176 0.820176

我试过了 :

In [23]: df1['c'] = np.where(max(df1['a'], df1['b'], df1['a'], df1['b'])

但是,这会引发语法错误。我没有任何方法可以在熊猫中做到这一点。我的实际数据框太复杂了,因此我想为此提供一个通用的解决方案。有任何想法吗?


问题答案:

您可以使用Series.where

df['c'] = df.b.where(df.a < df.b, df.a)
print (df)
          a         b         c
0  0.752072  0.813426  0.813426
1  0.868841  0.354665  0.868841
2  0.944651  0.745505  0.944651
3  0.485834  0.163747  0.485834
4  0.001487  0.820176  0.820176
5  0.904039  0.136355  0.904039
6  0.572265  0.250570  0.572265
7  0.514955  0.868373  0.868373
8  0.195440  0.484160  0.484160
9  0.506443  0.523912  0.523912

解决方案numpy.where

df['c'] = np.where(df['a'] > df['b'], df['a'], df['b'])
print (df)
          a         b         c
0  0.752072  0.813426  0.813426
1  0.868841  0.354665  0.868841
2  0.944651  0.745505  0.944651
3  0.485834  0.163747  0.485834
4  0.001487  0.820176  0.820176
5  0.904039  0.136355  0.904039
6  0.572265  0.250570  0.572265
7  0.514955  0.868373  0.868373
8  0.195440  0.484160  0.484160
9  0.506443  0.523912  0.523912

或更简单的发现max

df['c'] = df[['a','b']].max(axis=1)
print (df)
          a         b         c
0  0.752072  0.813426  0.813426
1  0.868841  0.354665  0.868841
2  0.944651  0.745505  0.944651
3  0.485834  0.163747  0.485834
4  0.001487  0.820176  0.820176
5  0.904039  0.136355  0.904039
6  0.572265  0.250570  0.572265
7  0.514955  0.868373  0.868373
8  0.195440  0.484160  0.484160
9  0.506443  0.523912  0.523912


 类似资料:
  • 问题内容: 当我对数据框中的单个元素进行比较时出现错误,但我不明白为什么。 我有一个数据框df,其中包含许多客户的时间序列数据,其中包含一些空值: 在我的脚本中,该行 生成一个错误: 但是,如果我在脚本行上放置了一个断点,并且在脚本停止时我将其输入到控制台中: 输出为: 如果我允许脚本从这一点继续执行,则会立即生成错误。 如果布尔表达式可以求值并具有值,为什么它在if表达式中生成错误?这对我来说毫

  • 我有一个运行良好的动态数据帧,但是当没有数据添加到数据帧中时,我会得到一个错误。因此,我需要一个解决方案来创建一个只有列名的空数据帧。 现在我有这样的东西: PS:列名仍然出现在数据帧中是很重要的。 但当我这样使用它时,我得到的结果是: “空数据帧”部分不错!但是我仍然需要显示列,而不是索引。 编辑: 我发现了一件重要的事情:我正在使用Jinja2将此数据帧转换为PDF,因此我调用了一个方法,首先

  • 问题内容: 我有一个熊猫DataFrame,其中包含多个列: 我想基于对数据框的每一行应用一个函数为此数据框创建两个新列。我不想多次调用该函数(例如,通过执行两次单独的调用),因为它占用大量计算资源。我尝试通过两种方式来执行此操作,但它们都不起作用: 使用: 我编写了一个函数,该函数接受a并返回我想要的值的元组: 尝试将此应用于DataFrame会出现错误: 然后,我将使用此问题中显示的方法将从返

  • 我想使用两列作为行ID,同时计算基于时间的分组。请看下图: 转化成这样: 正在发生的是,X在时间10发生了0次,但在15和23发生了1次。 Y在10点钟发生了3次,但在15和23没有。等等。

  • 问题内容: 我正在寻找一种方法来反向旋转数据框。据我所知,pandas提供了一种pivot或pivot_table方法将EAV df转换为“普通”方法。但是,还有一种方法可以做逆运算吗? 所以给定数据框: 我想将其转换为(EAV模型): 这样做最有效的方法是什么? 问题答案: 假设是索引,将执行以下操作: 如果不是索引,请像这样设置:

  • 问题内容: 我终于从包含许多json对象的文件中获得了我需要的数据输出,但是当它在数据中循环时,我需要一些帮助将以下输出转换为单个数据帧。这是产生输出的代码,包括输出外观的示例: 原始数据: 运行上面的命令时,我将获得示例输出,我希望将其存储为3列的pandas数据框中。 因此,以下代码似乎更接近,因为如果我在列表中传递并转置df,它会给我一个时髦的df。关于如何正确调整此形状的任何想法吗? 数据