DataFrame.assign(**kwargs)
为DataFrame分配新列。
返回一个新对象,该对象包含除新列之外的所有原始列。重新分配的现有列将被覆盖。
参数: | **kwargs : dict of {str: callable 或 Series} 列名是关键字。如果这些值是可调用的, 那么它们将在DataFrame上计算并分配给新列。 可调用项不能更改输入DataFrame(不过pandas不会检查它)。 如果这些值是不可调用的(例如, |
返回: | DataFrame 一个新的DataFrame,包含所有现有列之外的新列。 |
Notes
可以在同一个赋值中分配多个列。对于python3.6及以上版本,“**kwargs
”中后面的项目可能指“df”中新建或修改的列;项目按顺序计算并分配到“df”中。对于Python3.5及以下版本,没有指定关键字参数的顺序,您不能引用新创建或修改的列。所有项目首先计算,然后按字母顺序分配。
在版本0.23.0中进行了更改:关键字参数顺序在Python 3.6及更高版本中得到了维护。
例子,
>>> df = pd.DataFrame({'temp_c': [17.0, 25.0]},
... index=['Portland', 'Berkeley'])
>>> df
temp_c
Portland 17.0
Berkeley 25.0
其中值是可调用的,在df上求值:
>>> df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)
temp_c temp_f
Portland 17.0 62.6
Berkeley 25.0 77.0
或者,可以通过直接引用现有的Series或序列来实现相同的行为:
>>> df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
temp_c temp_f
Portland 17.0 62.6
Berkeley 25.0 77.0
在Python 3.6+中,您可以在同一个赋值中创建多个列,其中一个列依赖于同一个赋值中定义的另一个列:
>>> df.assign(temp_f=lambda x: x['temp_c'] * 9 / 5 + 32,
... temp_k=lambda x: (x['temp_f'] + 459.67) * 5 / 9)
temp_c temp_f temp_k
Portland 17.0 62.6 290.15
Berkeley 25.0 77.0 298.15