当前位置: 首页 > 知识库问答 >
问题:

Pandas dataframe:创建一个新列,该列是使用其他两列的自定义函数

孙佑运
2023-03-14

考虑下面的数据集存储在熊猫数据文件<代码> DFX < /代码>:

A   B
1   2
4   6
7   9

我有一个函数是:

def someThingSpecial(x,y)
  # z = do something special with x,y
  return z

现在,我想在df中创建一个新列,其中包含计算出的z值

查看其他SO示例,我尝试了几个变体,包括:

dfX['C'] = dfX.apply(lambda x: someThingSpecial(x=x['A'], y=x['B']), axis=1)

返回错误。正确的方法是什么?

共有2个答案

诸葛彦
2023-03-14

如果你的函数只需要一列的值,那么这样做,而不是coldpace的答案:

dfX['A'].apply(your_func)

要存储它:

dfX['C'] = dfX['A'].apply(your_func)
高晋
2023-03-14

这似乎在v0上对我有效。21.看一看-

df

   A  B
0  1  2
1  4  6
2  7  9

def someThingSpecial(x,y):
     return x + y


df.apply(lambda x: someThingSpecial(x.A, x.B), 1)

0     3
1    10
2    16
dtype: int64

您可能想尝试将熊猫版本升级到最新的稳定版本(目前为0.21)。

这是另一个选择。你可以矢量化你的函数。

v = np.vectorize(someThingSpecial)

v现在接受数组,但分别对每对元素进行操作。请注意,这只是隐藏了循环,就像apply一样,但要干净得多。现在,您可以这样计算C-

df['C'] = v(df.A, df.B)
 类似资料:
  • 问题内容: 我想比较在创建新列的两列的值。如果它们等于1,我想要1,否则等于0。 我得到了以下错误 问题答案: 您需要将布尔型蒙版转换为: 样品: 因为比较列的输出不是标量,而是(和)和值,所以会出现错误。 因此需要或 用于返回标量或。

  • 在我的scala程序中,我有一个dataframe,其中有两列和(类型都为)。除此之外,我有一个先前定义的对象和一些方法和属性。在这里,我想要使用dataframe的当前值和中的属性向dataframe添加一个新列。 例如,如果我有下面的dataframe: 谢谢你。

  • 我想将我的自定义函数(它使用if-else梯形)应用到数据帧每行中的这六列(,,,,,)。 我已经尝试了不同的方法从其他问题,但似乎仍然不能找到正确的答案,我的问题。关键的一点是,如果这个人被算作西班牙裔,他们就不能算作其他任何东西。即使他们在另一个种族栏中有一个“1”,他们仍然被算作西班牙裔,而不是两个或两个以上的种族。类似地,如果所有ERI列的总和大于1,则被计为两个或两个以上的种族,不能被计

  • 我想在Pandas数据集中创建一个新列,基于另外两个列的值。 现在,应该如下所示: 有什么帮助吗?

  • 问题内容: 我需要用一列更新表的每一行,作为同一表中其他两列的总和 像这样 UPDATE table1 SET table1.column1 =每行的总和(table1.column1 + table1.column2) 我试过了 因此,我可以通过首先选择所有rowId来迭代每个rowid来做到这一点 但是我需要在一个查询中处理该表中的所有行 当我尝试: 这将汇总column1和column2的所

  • 我想将熊猫数据框中的所有列连接起来,用空格分隔 (" ").有没有比df['新栏目']=df['a'] " " df['b']"...