pandas.DataFrame.assign#

DataFrame.assign(**kwargs)[源代码]#

为 DataFrame 分配新列。

返回一个新对象,其中包含所有原始列以及新列。重新赋值的现有列将被覆盖。

Parameters:
**kwargs{str: callable 或 Series} 的字典

列名是关键字。如果值为可调用对象,则在 DataFrame 上计算并赋给新列。可调用对象不应更改输入 DataFrame(尽管 pandas 不会检查它)。如果值不是可调用对象(例如,Series、标量或数组),则直接赋值。

Returns:
DataFrame

一个新 DataFrame,其中包含新列以及所有现有列。

Notes

可以在同一个 assign 中分配多个列。**kwargs 中的后续项可能引用 df 中新创建或修改的列;各项按顺序计算并赋值给 df

Examples

>>> 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

您可以在同一个 assign 中创建多个列,其中一个列依赖于在同一个 assign 中定义的另一个列:

>>> 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