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及更高版本中得到了维护。
例子,
1)向 DataFrame 添加新列
import pandas as np
import pandas as pd
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 使用 assign 添加新列 'C'
df_new = df.assign(C=[7, 8, 9])
print("原始 DataFrame:")
print(df)
print("\n添加新列后的 DataFrame:")
print(df_new)
2)修改现有列
import pandas as np
import pandas as pd
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 修改列 'B'
df_modified = df.assign(B=df['B'] * 2)
print("\n修改列 'B' 后的 DataFrame:")
print(df_modified)
3)使用函数创建新列
可以通过传递一个函数来计算新列的值。函数会应用到每一行上。
import pandas as np
import pandas as pd
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 添加列 'D',其值为列 'A' 和 'B' 的和
df_with_function = df.assign(D=lambda x: x['A'] + x['B'])
print("\n使用函数创建新列 'D' 后的 DataFrame:")
print(df_with_function)
4)同时添加多个新列
import pandas as np
import pandas as pd
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 同时添加列 'E' 和 'F'
df_multiple = df.assign(E=[10, 11, 12], F=lambda x: x['A'] * x['B'])
print("\n同时添加多个新列后的 DataFrame:")
print(df_multiple)
5)使用示例
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({'temp_c': [17.0, 25.0]}, index=['Portland', 'Berkeley'])
print("原始 DataFrame:")
print(df)
# 使用 assign 方法,计算 temp_f 列
df_with_temp_f = df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)
print("\n添加 temp_f 列后的 DataFrame:")
print(df_with_temp_f)
# 直接引用现有的 Series 或序列来计算 temp_f 列
df_with_temp_f_direct = df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
print("\n直接引用现有 Series 计算 temp_f 列后的 DataFrame:")
print(df_with_temp_f_direct)
# 在同一个赋值中创建多个列,其中一个列依赖于同一个赋值中定义的另一个列
df_with_multiple_cols = df.assign(
temp_f=lambda x: x['temp_c'] * 9 / 5 + 32,
temp_k=lambda x: (x['temp_f'] + 459.67) * 5 / 9
)
print("\n同一个赋值中创建多个列后的 DataFrame:")
print(df_with_multiple_cols)