python-3.x pandas.DataFrame.assign:如何引用新创建的列?[duplicate]

mrwjdhj3  于 2022-12-01  发布在  Python
关注(0)|答案(2)|浏览(140)

此问题在此处已有答案

Assign to Pandas dataframe in place with method chaining(1个答案)
2天前关闭。
我尝试在Pandas 1.5.2中使用pandas.DataFrame.assign。例如,让我们考虑以下代码:

df = pd.DataFrame({"col1":[1,2,3], "col2": [4,5,6]})
df.assign(
    test1="hello",
    test2=df.test1 + " world"
)

我面临着这样的错误:
属性错误:'DataFrame'对象没有属性'test1'
但是,in the documentation明确指出:
可以在同一个assign中分配多个栏目,**kwargs中后面的项目可以引用df中新建或修改的栏目;按顺序计算项并将其分配到df中。
所以我不明白:如何在调用assign时引用df中新创建或修改的列

vmjh9lq9

vmjh9lq91#

您可以将可调用对象传递给assign。此处使用lambda来引用DataFrame。
参数****{str:可赎回或系列}**
列名是关键字。**如果值是可调用的,它们将在DataFrame上计算并分配给新列。**可调用对象不能更改输入DataFrame(尽管Pandas不会检查它)。如果值是不可调用的(例如,一个Series、标量或数组),它们将被简单地分配。

df = pd.DataFrame({"col1":[1,2,3], "col2": [4,5,6]})

df.assign(
    test1="hello",
    test2=lambda d: d.test1 + " world"
)

输出量:

col1  col2  test1        test2
0     1     4  hello  hello world
1     2     5  hello  hello world
2     3     6  hello  hello world
n3ipq98p

n3ipq98p2#

您可以创建新的列,例如:"'"'df ['new']= df.col1 + something

import pandas as pd
df = pd.DataFrame({"col1":[1,2,3], "col2": [4,5,6]})
df['test1'] = "hello"
df['test2']=df.test1 + " world"
df

相关问题