.keep = "unused"
在 R 的 dplyr 包中,使用该函数创建新列时有一个选项mutate()
(相当于assign
)。
给没用过的人举个例子:
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
# any column used in creating `new_col` is dropped afterwards automatically
> mutate(.data = head(iris), new_col = Sepal.Length + Petal.Length * Petal.Width, .keep = "unused")
Sepal.Width Species new_col
1 3.5 setosa 5.38
2 3.0 setosa 5.18
3 3.2 setosa 4.96
4 3.1 setosa 4.90
5 3.6 setosa 5.28
6 3.9 setosa 6.08
我说它们是等效的,但Pandas 文档assign
中似乎没有这样做的选项,所以我认为它不存在。当时我很好奇创建一种方法来做类似的事情。
我能想到的一种方法是事先创建一个名称列表,然后将其删除,如下所示:
from sklearn import datasets
import pandas as pd
used_columns = ['sepal length (cm)', 'petal length (cm)', 'petal width (cm)']
iris = pd.DataFrame(datasets.load_iris().data, columns=datasets.load_iris().feature_names)
iris.assign(new_col = lambda x: x['sepal length (cm)'] + x['petal length (cm)'] * x['petal width (cm)']).drop(used_columns, axis=1)
或者
iris.assign(new_col = lambda x: x[used_columns[0]] + x[used_columns[1]] * x[used_columns[2]]).drop(used_columns, axis=1)
这看起来〜很好〜,但需要一个单独的列表,第一个列表需要保持两件事更新,第二个列表需要跟踪我脑海中第n个列表项的认知负荷。
所以我很好奇是否有另一种我不知道的方法可以做到这一点,这会更容易维护?上面两个看起来不太Pythonic?
我所做的研究:我对此做了很多谷歌搜索,但没有运气。似乎有 很多 方法 可以删除columns ,但我发现没有一种 方法特别适合这种情况。您能提供的任何帮助将不胜感激!使用其他Python包(例如)的答案也可以。 janitor
我从未使用过
R
,但根据unused
和 AFIK 的定义,要在 pandas 中模拟相同的行为,您将需要原始 DataFrame 的pop
每一列:copy
输出 :
类似于@Timeless的回答:
印刷: