我有一个dataframe
,它有两列。我想构建所有连续行的总和,其中column 0
的值是-1
。你知道吗
我的dataframe
看起来像这样:
0 2
1 3
-1 4
-1 7
0 2
-1 0
-1 1
-1 3
5 0
期望的输出应该是:
0 2
1 3
-1 11
0 2
-1 4
5 0
第二列中的值都等于或大于零。第一列上的值等于或大于-1
,如果这有帮助的话。我的方法将是一个循环,在这里我创建第二个dataframe
,然后向后推每个不等于-1
的值,然后累积,当我找到一个-1
时,但是我想,这种方法不会有效。
伪代码:
sum = 0
found = False
for row in dataframe:
if row[0] != -1:
if found:
new_df.append([-1, sum])
sum = 0
found = False
new_df.append(row)
elif row[0] == -1:
found = True
sum += row[1]
是否有一个内置的python或pandas函数可以用来实现我的目标?你知道吗
在我看来,这里有必要创建
Series
,以100%确定助手组的值是否与-1
之外的值相同,因此将0.5
添加到index
以区分:解释:
如果需要,请首先创建默认索引,因为在解决方案中使用了唯一的索引值:
然后为
-1
和其他值创建连续组:然后仅用^{} (通过掩码} 转换为
b
)过滤-1
值,另一个不匹配的值通过^{NaN
:然后用
0.5
的索引值替换缺少的值-从不在-1
的组和被替换的NaN
的值之间合并:然后将助手} 聚合第二列的} 删除索引:
Series
传递给groupby
,并通过^{sum
和第一列的first
,最后通过drop=True
通过^{另一个更简单、性能更好的解决方案:
解释:
首先是必要的默认索引:
然后将列by
-1
与布尔掩码进行比较:按
reset_index
将索引转换为不带drop
参数的列:创建具有
shift
和cumsum
的连续组,并按掩码筛选-1
组:按索引列聚合
first
,按b
列聚合sum
:通过^{} 将
index
列转换为index
:通过^{} 将
a
列与常量-1
相加:最后按^{} 筛选出
-1
行,按~
反向掩码:然后通过^{} 将新数据添加到原始数据:
最后^{} 对于相同的顺序:
相关问题 更多 >
编程相关推荐