我正在尝试在熊猫中创建一个数据框,并直接使用生成的列之一将新列分配给同一df。
作为一个简化的示例,我尝试使用assign将df的列相乘:
import pandas as pd
df = pd.DataFrame([['A', 1], ['B', 2], ['C', 3]] , columns = ['col1', 'col2'])\
.assign(col3 = 2 * col2)
但是我得到一个错误NameError: name 'col2' is not defined
。
使用R / dplyr,我将可以在管道中使用
df <- data.frame(col1 = LETTERS[1:3], col2 = 1:3) %>% mutate(col3 = 2 * col2)
在一般意义上,R / dplyr中的管道符号也允许使用“。”引用管道转发的数据。
是否有一种方法可以引用刚创建的列(或引用到assign语句中的数据),从而在Pandas中执行相同的操作?
答案 0 :(得分:2)
使用lambda函数,有关更多信息,请访问Assigning New Columns in Method Chains:
df = (pd.DataFrame([['A', 1], ['B', 2], ['C', 3]] , columns = ['col1', 'col2'])
.assign(col3 = lambda x: 2 * x.col2))
print (df)
col1 col2 col3
0 A 1 2
1 B 2 4
2 C 3 6
答案 1 :(得分:1)
我写了一个包 datar
将 dplyr
和 family 移植到 python。现在,您可以使用(几乎)与在 R 中执行的语法相同的语法来执行此操作:
>>> from datar.all import f, tibble, LETTERS, mutate
>>> tibble(col1=LETTERS[:3], col2=f[1:3]) >> mutate(col3=2*f.col2)
col1 col2 col3
<object> <int64> <int64>
0 A 1 2
1 B 2 4
2 C 3 6