【Python数据分析系列】循环遍历DataFrame每一行并根据处理结果在该行新增列(案例+源码)

这是我的第389篇原创文章。

一、引言

       在Python中,使用 pandas 库处理 DataFrame 是非常常见的操作。如果你需要循环遍历每一行,并根据处理结果在该行新增几列,假设我们有一个 DataFrame,包含两列 A 和 B,我们希望对每一行进行处理,并新增两列 C 和 D,其中 C = A + BD = A * B。可以通过以下几种方式实现。

二、实现过程

2.1 使用apply方法

apply 方法是处理 DataFrame 的高效方式,适用于对每一行或每一列进行操作。如果你需要对每一行进行处理,并在该行新增几列,可以定义一个函数,然后将其应用到每一行。

import pandas as pd

# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 定义一个函数,用于处理每一行
def process_row(row):
    row['C'] = row['A'] + row['B']
    row['D'] = row['A'] * row['B']
    return row

# 使用 apply 方法对每一行应用处理函数
df = df.apply(process_row, axis=1)

print(df)

2.2 使用iterrowsitertuples

如果你需要更细致地控制每一行的处理过程,可以使用 iterrows 或 itertuples 遍历每一行,然后手动更新 DataFrame

import pandas as pd

# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 遍历每一行,处理并新增列
for index, row in df.iterrows():
    df.loc[index, 'C'] = row['A'] + row['B']
    df.loc[index, 'D'] = row['A'] * row['B']

print(df)

2.3 使用 assign 方法

assign 方法可以用于在 DataFrame 中新增列,它返回一个新的 DataFrame,不会修改原始数据。

import pandas as pd

# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 使用 assign 方法新增列
df = df.assign(
    C=lambda x: x['A'] + x['B'],
    D=lambda x: x['A'] * x['B']
)

print(df)

2.4 直接使用向量化操作

如果处理逻辑比较简单,可以直接使用向量化操作,这种方式通常比循环更高效。

import pandas as pd

# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 直接计算并新增列
df['C'] = df['A'] + df['B']
df['D'] = df['A'] * df['B']

print(df)

三、小结

总结

  • apply 方法:适用于复杂的行处理逻辑。

  • iterrows 或 itertuples:适用于需要逐行处理的情况,但性能较低。

  • assign 方法:适用于需要新增多列的情况,且不会修改原始数据。

  • 向量化操作:适用于简单的计算逻辑,性能最高。

根据你的具体需求选择合适的方法。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。