Pandas DataFrame 基于其他列创建新列

本教程将介绍我们如何在 Pandas DataFrame 中根据 DataFrame 中其他列的值,通过对列的每个元素应用函数或使用 DataFrame.apply() 方法来创建新的列。

import pandas as pd
items_df = pd.DataFrame({
    'Id': [302, 504, 708, 103, 343, 565],
    'Name': ['Watch', 'Camera', 'Phone', 'Shoes', 'Laptop', 'Bed'],
    'Cost': [300, 400, 350, 100, 1000, 400],
    'Discount(%)': [10, 15, 5, 0, 2, 7]
})
print(items_df)

输出:

    Id    Name  Cost  Discount(%)
0  302   Watch   300           10
1  504  Camera   400           15
2  708   Phone   350            5
3  103   Shoes   100            0
4  343  Laptop  1000            2
5  565     Bed   400            7

我们将使用上面代码片段中显示的 DataFrame 来演示如何根据 DataFrame 中其他列的值在 Pandas DataFrame 中创建新的列。

Pandas DataFrame 中根据其他列的值按元素操作创建新列

import pandas as pd
items_df = pd.DataFrame({
    'Id': [302, 504, 708, 103, 343, 565],
    'Name': ['Watch', 'Camera', 'Phone', 'Shoes', 'Laptop', 'Bed'],
    'Actual Price': [300, 400, 350, 100, 1000, 400],
    'Discount(%)': [10, 15, 5, 0, 2, 7]
})
print("Initial DataFrame:")
print(items_df, "\n")
items_df['Final Price'] = items_df['Actual Price'] - \
    ((items_df['Discount(%)']/100) * items_df['Actual Price'])
print("DataFrame after addition of new column")
print(items_df, "\n")

输出:

Initial DataFrame:
    Id    Name  Actual Price  Discount(%)
0  302   Watch           300           10
1  504  Camera           400           15
2  708   Phone           350            5
3  103   Shoes           100            0
4  343  Laptop          1000            2
5  565     Bed           400            7
DataFrame after addition of new column
    Id    Name  Actual Price  Discount(%)  Final Price
0  302   Watch           300           10        270.0
1  504  Camera           400           15        340.0
2  708   Phone           350            5        332.5
3  103   Shoes           100            0        100.0
4  343  Laptop          1000            2        980.0
5  565     Bed           400            7        372.0

它通过从 DataFrame 的 Actual Price 一栏中减去折扣额的价值来计算每个产品的最终价格。然后将最终价格值的 Series 分配到 DataFrame items_dfFinal Price 列。

使用 DataFrame.apply() 方法在 Pandas DataFrame 中根据其他列的值创建新列

import pandas as pd
items_df = pd.DataFrame({
    'Id': [302, 504, 708, 103, 343, 565],
    'Name': ['Watch', 'Camera', 'Phone', 'Shoes', 'Laptop', 'Bed'],
    'Actual_Price': [300, 400, 350, 100, 1000, 400],
    'Discount_Percentage': [10, 15, 5, 0, 2, 7]
})
print("Initial DataFrame:")
print(items_df, "\n")
items_df['Final Price'] = items_df.apply(
    lambda row: row.Actual_Price - ((row.Discount_Percentage/100)*row.Actual_Price), axis=1)
print("DataFrame after addition of new column")
print(items_df, "\n")

输出:

Initial DataFrame:
    Id    Name  Actual_Price  Discount_Percentage
0  302   Watch           300                   10
1  504  Camera           400                   15
2  708   Phone           350                    5
3  103   Shoes           100                    0
4  343  Laptop          1000                    2
5  565     Bed           400                    7
DataFrame after addition of new column
    Id    Name  Actual_Price  Discount_Percentage  Final Price
0  302   Watch           300                   10        270.0
1  504  Camera           400                   15        340.0
2  708   Phone           350                    5        332.5
3  103   Shoes           100                    0        100.0
4  343  Laptop          1000                    2        980.0
5  565     Bed           400                    7        372.0

它将 apply() 方法中定义的 lambda 函数应用于 DataFrame items_df 的每一行,最后将一系列结果分配到 DataFrame items_dfFinal Price 列。