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

基于数组连续正负值计数,向双列DataFrame追加数据的方法求助

解决连续值计数并生成目标DataFrame的方案

我来帮你搞定这个问题!要实现根据数组y的连续值计数来生成两列的DataFrame,我们可以用Pandas的分组功能高效处理,下面是具体步骤和完整代码:

步骤1:导入依赖并准备数据

首先导入Pandas,定义你的目标数组:

import pandas as pd

y = [1, -1, -1, 1, 1, 1, 1, -1, -1]

步骤2:识别连续值的分组

我们需要先把数组中连续相同值的片段分成不同组,通过比较当前元素和前一个元素的差异,生成唯一的分组ID:

# 将数组转为Series方便后续处理
s = pd.Series(y)
# 当当前元素和前一个元素不同时标记为True,累加后得到每个连续段的唯一ID
group_ids = s.ne(s.shift()).cumsum()

步骤3:统计每个连续段的数值和次数

基于分组ID,我们可以快速统计每个连续段的对应数值和出现次数:

# 每个分组的第一个元素就是该段的目标数值
segment_values = s.groupby(group_ids).first()
# 每个分组的大小就是该数值连续出现的次数
segment_counts = s.groupby(group_ids).count()

步骤4:生成目标DataFrame

把统计结果转换成包含1_counts和-1_counts两列的格式,对应段的次数填入对应列,其他列补0:

# 先创建包含数值和次数的临时DataFrame
temp_df = pd.DataFrame({'value': segment_values, 'count': segment_counts})
# 转成两列格式,空值填充0并转为整数类型
df_count = temp_df.pivot(columns='value', values='count').fillna(0).astype(int)
# 重命名列名让结果更直观
df_count.columns = [f'{col}_counts' for col in df_count.columns]
# 重置索引(可选,让索引从0开始)
df_count = df_count.reset_index(drop=True)

运行完上述代码后,df_count就是你期望的结果:

1_counts  -1_counts
0         1          0
1         0          2
2         4          0
3         0          2

额外场景补充

如果你的需求是给原始数组的每个元素都添加对应连续计数(比如每个位置显示当前连续值的累计次数),可以用下面的代码:

df = pd.DataFrame({'y': y})
df['current_count'] = df.groupby(group_ids).cumcount() + 1
df['1_counts'] = df.apply(lambda row: row['current_count'] if row['y'] == 1 else 0, axis=1)
df['-1_counts'] = df.apply(lambda row: row['current_count'] if row['y'] == -1 else 0, axis=1)

这样得到的DataFrame会和原始数组长度一致,每个元素对应自己所在连续段的累计计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:05:36