You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中对指定行列索引的值进行数学比较

使用itertuples对比Pandas DataFrame特定列值

你有如下Pandas DataFrame:

import pandas as pd
import numpy as np
np.random.seed(2022)

# 生成示例数据
close = np.sin(range(610)) + 10
high = close + np.random.rand(*close.shape)
open_col = high - np.random.rand(*close.shape)
low = high - 3
close[2] += 100  
dates = pd.date_range(end='2022-06-30', periods=len(close))

# 创建DataFrame
df = pd.DataFrame(index=dates, data=np.array([open_col, high, low, close]).T, columns=['Open', 'High', 'Low', 'Close'])

需求是判断每行中Open列的值是否小于Close列的值,以下是用itertuples实现的具体方法:

核心实现逻辑

itertuples()会将DataFrame的每一行转换为命名元组,元组包含行索引和各列的数值,你可以直接通过列名访问对应值,进而执行对比判断。

方法1:遍历生成结果列表

results = []
for row in df.itertuples():
    # 提取当前行的Open、Close值及日期索引
    date = row.Index
    open_val = row.Open
    close_val = row.Close
    # 执行判断
    is_open_lt_close = open_val < close_val
    # 存储结果
    results.append({
        'Date': date,
        'Open': open_val,
        'Close': close_val,
        'Open < Close': is_open_lt_close
    })

# 转换为DataFrame查看完整结果
result_df = pd.DataFrame(results).set_index('Date')
print(result_df.head())

输出结果:

Open       Close  Open < Close
Date                                           
2020-10-29   9.557631   10.000000          True
2020-10-30  10.794789   10.841471          True
2020-10-31  10.631242  110.909297          True
2020-11-01   9.639562   10.141120          True
2020-11-02   9.835697    9.243198         False

方法2:直接在原DataFrame添加判断列

如果只需要将判断结果作为新列添加到原DataFrame,用列表推导式更简洁:

df['Open < Close'] = [row.Open < row.Close for row in df.itertuples()]
print(df[['Open', 'Close', 'Open < Close']].head())

关键说明

  • itertuples()生成的命名元组,属性名与DataFrame列名完全对应,无需额外映射
  • 相比iterrows(),itertuples()的执行效率更高,因为它返回轻量级元组而非Series,适合处理大规模数据集
  • 如果需要自定义元组名称,可以通过name参数指定,例如df.itertuples(name='StockData'),之后可通过row.StockData.Open访问值

内容的提问来源于stack exchange,提问作者Callum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:55:47