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

如何在满足条件时用Pandas DataFrames实现单元格+1计数

Pandas条件更新与统计问题解答

问题1:如何在满足if条件时,使用Pandas DataFrames将单元格的值加1?

有两种高效实现方式:

  • 单个单元格更新:使用df.at[row_index, column_name] += 1,精准定位单个单元格并累加,适合目标明确的场景。
  • 批量行更新:通过布尔索引配合loc实现向量化操作,比如df.loc[df['判断列'] == 条件, '目标列'] += 1,这种方式无需遍历每行,处理大数据集时效率极高。

问题2:检测CSV同一行两列值相等时,更新另一个DataFrame对应单元格并统计次数

针对你的需求,原代码的while循环遍历效率极低,推荐用Pandas向量化操作优化,完整方案如下:

优化思路

  1. 建立活动编码与目标列名的映射字典,避免重复编写判断逻辑;
  2. 筛选出两列值相等的行,统计各类活动的匹配次数;
  3. 批量更新目标DataFrame的对应单元格。

完整优化代码

import pandas as pd

# 读取数据集
final_activities = pd.read_csv(
    "VPN2/VPN2_Final_Activities.csv",
    delimiter=';',
    names=['Timerels', 'ActivityClass_Ankle', 'ActivityClass_Hip', 'ActivityClass_Thigh', 'ActivityClass_Wrist', 'ActivityClass_Annotation'],
    skip_blank_lines=True,
    skipinitialspace=True,
    engine='python',
    header=0
)

matricsFile = pd.read_csv(
    "VPN2/VPN2_Final_Matrics.csv",
    delimiter=';',
    names=['lying', 'cycling', 'ascending stairs', 'jogging', 'descending stairs', 'walking', 'standing', 'sitting', 'unknown'],
    skip_blank_lines=True,
    skipinitialspace=True,
    engine='python',
    header=0
)

# 活动编码与列名的映射关系
activity_mapping = {
    1: 'lying',
    3: 'cycling',
    4: 'ascending stairs',
    5: 'jogging',
    6: 'descending stairs',
    7: 'walking',
    9: 'standing',
    11: 'sitting',
    0: 'unknown'
}

# 转换列类型为整数,确保匹配准确
final_activities['ActivityClass_Annotation'] = final_activities['ActivityClass_Annotation'].astype(int)
final_activities['ActivityClass_Ankle'] = final_activities['ActivityClass_Ankle'].astype(int)

# 筛选两列值相等的行,并统计每个活动的出现次数
matched_rows = final_activities[final_activities['ActivityClass_Annotation'] == final_activities['ActivityClass_Ankle']]
match_counts = matched_rows['ActivityClass_Annotation'].value_counts().to_dict()

# 更新matricsFile中的对应单元格
for code, col_name in activity_mapping.items():
    if code in match_counts:
        matricsFile.at[1, col_name] += match_counts[code]

# 可选:保存更新后的统计文件
# matricsFile.to_csv("VPN2/VPN2_Final_Matrics_Updated.csv", sep=';', index=False)

优化优势

  • 效率提升:向量化操作基于底层C实现,相比逐行循环,处理大数据集时速度提升数十倍;
  • 代码简洁:映射字典统一管理活动编码与列名,新增或修改活动只需调整字典,无需修改多处判断逻辑;
  • 稳定性高:避免循环中可能出现的索引错误,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Edwin von Lemberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:01:30