Python pandas.DataFrame.assign函数方法的使用

pandas.DataFrame.assign 函数用于向 DataFrame 添加新的列或修改现有列。它返回一个新的 DataFrame,对原始数据不进行修改。本文主要介绍一下Pandas中pandas.DataFrame.assign方法的使用。

DataFrame.assign(**kwargs)

为DataFrame分配新列。

返回一个新对象,该对象包含除新列之外的所有原始列。重新分配的现有列将被覆盖。

参数:

**kwargs : dict of {str: callable 或 Series}

列名是关键字。如果这些值是可调用的,

那么它们将在DataFrame上计算并分配给新列。

可调用项不能更改输入DataFrame(不过pandas不会检查它)。

如果这些值是不可调用的(例如,Seriesscalararray),则只分配它们。

返回:

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)

推荐阅读
cjavapy编程之路首页