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

如何用for循环或简洁命令简化重复Pandas代码并合并结果

简化重复数据处理并合并结果

方法1:使用for循环遍历唯一值

这种方法直观易懂,适合逐步验证每个子集的处理逻辑:

import numpy as np
import pandas as pd

# 获取cal列的所有唯一值
unique_cal_values = df['cal'].unique()

# 创建空列表存储每个子集的处理结果
result_list = []

for val in unique_cal_values:
    # 筛选当前cal值对应的子数据集(加.copy()避免SettingWithCopyWarning)
    subset = df[df['cal'] == val].copy()
    # 计算lesser_count:利用numpy的广播和三角矩阵实现逻辑
    diff_matrix = np.subtract.outer(subset['col2'].values, subset['cal2'].values)
    lower_triangle = np.tril(diff_matrix, k=0)
    subset['lesser_count'] = np.sum(lower_triangle < 0, axis=1)
    # 过滤出lesser_count大于0的行
    filtered = subset[subset['lesser_count'] > 0]
    # 将结果加入列表
    result_list.append(filtered)

# 合并所有子集结果为单个DataFrame
final_combined_result = pd.concat(result_list, ignore_index=True)

方法2:使用groupby向量化处理(推荐)

利用pandas的groupby可以更简洁高效地完成分组处理,避免显式循环,更符合pandas的惯用写法:

import numpy as np
import pandas as pd

def process_cal_group(group):
    # 对每个分组执行相同的计算逻辑
    diff_matrix = np.subtract.outer(group['col2'].values, group['cal2'].values)
    lower_triangle = np.tril(diff_matrix, k=0)
    group['lesser_count'] = np.sum(lower_triangle < 0, axis=1)
    # 返回过滤后的结果
    return group[group['lesser_count'] > 0]

# 按cal列分组,应用处理函数,最后合并结果
final_combined_result = df.groupby('cal').apply(process_cal_group).reset_index(drop=True)

补充说明

  • 两种方法最终都会输出合并后的单个数据集,满足你的需求。
  • groupby方法在处理大数据集时性能更优,内部做了优化,减少了重复的DataFrame创建操作。
  • 如果运行时出现SettingWithCopyWarning,可以在筛选子集时添加.copy()(如方法1中所示),确保操作的是数据副本而非视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:35:12