小能豆

Pandas:如何根据另一列的值创建一列?

py

我需要在数据框的末尾创建一个新列,新列中的值是应用某个函数的结果,该函数的参数基于其他列。具体来说,来自另一列,但不同的行。例如,如果我的数据框有两列,分别包含值x_iy_i那么我的第三列将是f(x_(i-1), y_(i-1))

我知道要创建一个新列,最简单的方法是执行以下操作

df['new_row'] = ...

但我不确定我能为此设置什么。


阅读 15

收藏
2024-12-09

共1个答案

小能豆

你可以使用 shift 方法来获取前一行的值,然后应用函数来计算新列的值。shift 方法将列中的数据沿着指定的轴进行移动,默认情况下它会将所有值向下移动1行,因此你可以利用它来获取上一行的数据。

以下是一个简单的示例,假设你的 DataFrame 有两列 xy,你想要新列 z 是通过函数 f(x_(i-1), y_(i-1)) 来计算的:

import pandas as pd

# 创建示例数据框
data = {'x': [1, 2, 3, 4],
        'y': [5, 6, 7, 8]}

df = pd.DataFrame(data)

# 定义函数 f(x, y)
def f(x, y):
    return x + y  # 示例函数

# 使用 shift 获取前一行的值
df['new_col'] = f(df['x'].shift(1), df['y'].shift(1))

print(df)

输出:

   x  y  new_col
0  1  5      NaN
1  2  6      6.0
2  3  7      8.0
3  4  8     10.0

解释:

  • df['x'].shift(1)df['y'].shift(1) 获取了每列的前一行的值。
  • f(df['x'].shift(1), df['y'].shift(1)) 对前一行的 xy 应用了函数 f
  • 第0行会返回 NaN,因为没有前一行的数据。

你可以根据自己的需求修改函数 f,例如,计算其他更复杂的值或进行任何其他操作。

2024-12-09