引用正在定义的数据框的列

时间:2019-05-20 12:36:33

标签: python pandas

我正在尝试在熊猫中创建一个数据框,并直接使用生成的列之一将新列分配给同一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中执行相同的操作?

2 个答案:

答案 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)

我写了一个包 datardplyr 和 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