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

DataFrame中按Dir行区间统计Yes出现次数并新增列

按区间统计DataFrame中Dir行之间的Yes次数并添加新列

需求说明

需要统计DataFrame中两个Dir行之间(包含起始Dir行)Problem列中Yes的出现次数,并将该次数作为新列yes_count添加到区间起始的Dir行旁。

现有数据

Type,Problem
Parent,
Dir,Yes
File,
Opp,Yes
Dir,
Metadata,
Subfolder,Yes
Dir,
Opp,Yes

预期输出

Type   Problem     yes_count
   Parent       
      Dir       Yes             2
     File       
      Opp       Yes 
      Dir                       1
 Metadata       
Subfolder       Yes 
      Dir                       1
      Opp       Yes 

解决方案

可以通过分组标记、组内统计的方式实现,具体代码如下:

import pandas as pd

# 读取数据(实际使用时可替换为pd.read_csv("your_file.csv"))
data = """Type,Problem
Parent,
Dir,Yes
File,
Opp,Yes
Dir,
Metadata,
Subfolder,Yes
Dir,
Opp,Yes"""
df = pd.read_csv(pd.compat.StringIO(data))

# 1. 生成Dir分组:每遇到Type为Dir时,分组编号递增,将当前Dir及后续行直到下一个Dir划为同一组
df['dir_group'] = (df['Type'] == 'Dir').cumsum()

# 2. 统计每个分组内Problem列中Yes的总次数
group_yes_counts = df.groupby('dir_group')['Problem'].apply(lambda x: x.str.count('Yes').sum()).astype(int)

# 3. 将统计结果赋值给对应分组的Dir行,其他行留空
df['yes_count'] = df.apply(
    lambda row: group_yes_counts[row['dir_group']] if row['Type'] == 'Dir' else '',
    axis=1
)

# 移除临时分组列
df = df.drop('dir_group', axis=1)

# 打印输出结果
print(df.to_string(index=False))

步骤解释

  1. 分组标记:用cumsum()对Type == 'Dir'的布尔值累加,生成唯一的分组编号,确保每个Dir行和它之后到下一个Dir前的行属于同一组。
  2. 组内统计:按分组对Problem列中的Yes次数求和,得到每个区间的Yes总数。
  3. 赋值新列:通过apply()将对应分组的统计结果赋值给该组的Dir行,其他行保持空值。
  4. 清理临时列:移除用于分组的临时列dir_group,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07