1. 贴士文章
  2. Python Pandas Howtos
  3. Pandas DataFrame 基于其他列创建新列

创建时间: January-22, 2021 | 更新时间: February-09, 2021

  1. Pandas DataFrame 中根据其他列的值按元素操作创建新列
  2. 使用 DataFrame.apply() 方法在 Pandas DataFrame 中根据其他列的值创建新列

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

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

输出:

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

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

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

Pandas DataFrame 基于其他列创建新列 | D栈 - Delft Stack - 图1

Video Player is loading.

Current Time 0:00

Duration 50:27

Remaining Time 50:27

Pandas DataFrame 基于其他列创建新列 | D栈 - Delft Stack - 图2

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

输出:

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

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

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

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

输出:

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

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

相关文章 - Pandas DataFrame Column

Pandas DataFrame 基于其他列创建新列 | D栈 - Delft Stack - 图3

https://www.delftstack.com/zh/howto/python-pandas/pandas-create-column-based-on-other-columns/