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

Pandas / Python:根据另一列中的值设置一列的值

西门马鲁
2023-03-14
问题内容

我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑:

if df['c1'] == 'Value':
    df['c2'] = 10
else:
    df['c2'] = df['c3']

我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。

如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

问题答案:

一种方法是将索引与配合使用.loc

在没有示例数据框的情况下,我将在此处进行补充:

import numpy as np
import pandas as pd

df = pd.DataFrame({'c1': list('abcdefg')})
df.loc[5, 'c1'] = 'Value'

>>> df
      c1
0      a
1      b
2      c
3      d
4      e
5  Value
6      g

假设您想 创建一个新列 c2c1除wherec1是之外, 该列 等效Value,在这种情况下,您希望将其分配给10:

首先,您可以使用以下两行之一创建一个新的列c2,并将其设置为等效于c1,(它们本质上是做相同的事情):

df = df.assign(c2 = df['c1'])
# OR:
df['c2'] = df['c1']

然后,找到所有c1等于'Value'使用的索引.loc,并c2在这些索引处分配所需的值:

df.loc[df['c1'] == 'Value', 'c2'] = 10

最终,您将得到:

>>> df
      c1  c2
0      a   a
1      b   b
2      c   c
3      d   d
4      e   e
5  Value  10
6      g   g

如果按照问题中的建议,有时您可能只是想 替换已有的列中的值 ,而不是创建一个新列,则跳过该列的创建,然后执行以下操作:

df['c1'].loc[df['c1'] == 'Value'] = 10
# or:
df.loc[df['c1'] == 'Value', 'c1'] = 10

给你:

>>> df
      c1
0      a
1      b
2      c
3      d
4      e
5     10
6      g


 类似资料:
  • 问题内容: 我有一个名为Vendor的表,在此表中有一个名为AccountTerms的列,该列仅显示一个值(即0、1、2、3),依此类推。我也有一个要使用()的列,以反映该值的含义,例如: 等等… 我需要的是一个脚本,它将查看AccountTerms中的值,然后将更新以显示上面显示的单词值。我该怎么做呢? 问题答案: 我将尝试以一种尽可能简单的方式来解释这一点,以便于理解: 假设您有一个这样的表设

  • 我有一个数据库,其中多个变量显示为连续的行(如下所示,变量由其标记区分)。因此,它们的值在“值”列中显示为连续行。 现有表格: 对于数据分析,我需要将每个变量的值拆分为单独的列,如下所示。 下面列出了SQLite查询。我曾尝试使用分组标记并平均值,但结果变得过于细粒度,无法使用。 建议将不胜感激!

  • 问题内容: 我有下表。 我想选择的每一个具有最低。 当我得到所需的内容后,一旦添加了列,就需要将其也添加到GROUP BY子句,当我需要的只是每种类型的最低要求时,它返回所有行。 问题答案: 在标准SQL中,这可以使用窗口函数来完成 但是,Postgres具有运算符,该运算符通常比带有窗口函数的相应解决方案要快:

  • 问题内容: 我有这样的桌子 我需要选择何时类型为0,何时类型为1,何时类型为N … 我怎样才能做到这一点? 问题答案:

  • 我试图用Python复制我的Stata代码,我被指向熊猫的方向。然而,我很难思考如何处理数据。 假设我想遍历列标题“ID”中的所有值。如果该ID与一个特定的数字匹配,那么我想更改两个相应的值FirstName和LastName。 在Stata,它看起来像这样: 因此,这将替换 FirstName 中与 ID == 103 到 Matt 的值对应的所有值。 在熊猫身上,我正在尝试这样的东西 不知道该

  • 我有一个pandas数据帧,它由两个带值的列组成。有些值丢失了,我想创建第三列,以标记两列中是否都有丢失的值,或者是否有一列被填充。我不知道如何做这件事,因为我是新来的,如果你能提供任何帮助,我将不胜感激