【问题标题】:Pandas: Add new columns to DataFrame based on values in columnsPandas:根据列中的值向 DataFrame 添加新列
【发布时间】:2014-12-19 10:18:10
【问题描述】:

给定这样的 DataFrame:

>>> df
    0   1   2
0   2   3   5
1   3   4   7

还有一个返回多个结果的函数,像这样:

def sumprod(x, y, z):
    return x+y+z, x*y*z

我想添加新列,所以结果是:

>>> df
    0   1   2  sum  prod
0   2   3   5   10    30
1   3   4   7   14    84

我已经成功使用返回一个结果的函数:

df["sum"] = p.apply(sum, axis=1)

但如果它返回多个结果,则不会。

【问题讨论】:

  • 这是一个关于如何使用您的函数返回多列的一般问题,还是只是为了实现您的结果?例如:df['sum'], df['prod'] = df.sum(axis=1), df.prod(axis=1) 给你你想要的
  • 这是一个普遍的问题。

标签: python pandas dataframe


【解决方案1】:

一种方法是通过解包数组的转置将 DataFrame 的列传递给函数:

>>> df['sum'], df['prod'] = sumprod(*df.values.T)
>>> df
   0  1  2  sum  prod
0  2  3  5   10    30
1  3  4  7   14    84

sumprod 返回一个列元组,由于 Python 支持多重赋值,您可以将它们分配给新的列标签,如上所述。

你可以写df['sum'], df['prod'] = sumprod(df[0], df[1], df[2]) 来得到同样的结果。如果您需要以特定顺序将列传递给函数,这会更清晰并且更可取。另一方面,如果您有很多列要传递给函数,则会更加冗长。

【讨论】:

  • 后来,我发现这只适用于可以处理数组的函数。其他情况:zip(*map(lambda i: func(*i), df.values))
猜你喜欢
  • 2018-08-13
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2020-06-09
  • 2022-01-22
  • 2018-09-01
  • 1970-01-01
相关资源
最近更新 更多