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

熊猫:在数据框中创建两个新列,并使用从现有列中计算出的值

楚天宇
2023-03-14
问题内容

我正在使用pandas库,我想将两个新列添加到df具有n列(n> 0)的数据框中。
这些新列是由于将函数应用于数据框中的某一列而产生的。

要应用的功能如下:

def calculate(x):
    ...operate...
    return z, y

为仅返回值的函数创建新列的一种方法是:

df['new_col']) = df['column_A'].map(a_function)

所以,我想要的但尝试失败的(*)是这样的:

(df['new_col_zetas'], df['new_col_ys']) = df['column_A'].map(calculate)

实现此目的的最佳方法是什么?我毫无头绪地扫描了文档。

*df['column_A'].map(calculate)返回一个熊猫系列,每个项目都由一个元组z,y组成。尝试将其分配给两个数据框列会产生ValueError。


问题答案:

我只用zip

In [1]: from pandas import *

In [2]: def calculate(x):
   ...:     return x*2, x*3
   ...:

In [3]: df = DataFrame({'a': [1,2,3], 'b': [2,3,4]})

In [4]: df
Out[4]: 
   a  b
0  1  2
1  2  3
2  3  4

In [5]: df["A1"], df["A2"] = zip(*df["a"].map(calculate))

In [6]: df
Out[6]: 
   a  b  A1  A2
0  1  2   2   3
1  2  3   4   6
2  3  4   6   9


 类似资料:
  • 问题内容: 我有一个如下所示的df: 我正在尝试创建一个如下所示的df: 我试过了 但这不是我要寻找的。 任何指导表示赞赏 问题答案: 那不是新的专栏,而是新的DataFrame: 要获得想要的结果,请使用: 要获得“新列”,您可以使用transform: 我建议阅读docs的split- apply-combine部分 。

  • 问题内容: 我有一个数据框df 添加了新列 现在,我想编写一个将进行日期比较的函数或宏,创建一个新的数据框,也向数据框添加一个新列。 我这样尝试过,但似乎我做错了: 现在,当我调用测试函数时,我希望创建一个名为的新数据框,并且此新数据框应再增加一列,该列的所有行的值均为。 新数据框的输出为: df_new_201612 问题答案: 创建具有动态名称的变量通常是一个坏习惯。 我认为针对您的问题的最佳

  • 问题内容: 这是我的df的简化示例: 我想按行对列中的数据求和: 现在,我的问题来了!我想创建4个新列,并从每一行的总和中计算百分比值。因此,第一个新列中的第一个值应该是(0.095389 / 4.258550),第二个新列中的第一个值(0.556978 / 4.258550)…依此类推…请帮助 问题答案: 您可以像这样手动轻松地为每个列执行此操作: 如果您要一步一步对所有列进行此操作,则可以使用

  • 问题内容: 我有以下数据框: 现在,我想创建另一个列,其值在和之间最大。因此,我希望将其作为输出: 我试过了 : 但是,这会引发语法错误。我没有任何方法可以在熊猫中做到这一点。我的实际数据框太复杂了,因此我想为此提供一个通用的解决方案。有任何想法吗? 问题答案: 您可以使用: 解决方案: 或更简单的发现:

  • 问题内容: 我有一个OHLC价格数据集,该数据集已从CSV解析为Pandas数据框,并重新采样为15分钟的柱形: 我想添加各种计算的列,从简单的列开始,例如期间范围(HL),然后是布尔值以指示我将定义的价格模式的出现-例如锤形蜡烛模式,为其定义示例: 基本问题:如何将函数映射到列,特别是在我想引用多个其他列或整行或其他内容的地方? 这篇文章处理从单个源列添加两个计算列,这是很接近的,但还不完全是。

  • 问题内容: 我有一个名称为的csv文件。我打开并使用以下方法创建了一个熊猫: 其中,是字符串对象的python列表。示例(实际列表的长度为22): 在ipython提示符下,如果我键入并按Enter键,则不会获得带有列和值的数据框,如Pandas网站上的示例所示。相反,我获得有关数据框的信息。我得到: 如果我键入,那么我确实会获得该列的预期值。我有两个问题: (1)在pandas网站上的示例中(例