根据其他列中的值对列中的值求和并附加到 df - python

Sum values in column based on values in other column and append to df - python

我有一个看起来像这样的 df: df here

Count 列给出的值要么是 0,要么是用零分隔的较大数字的延伸,例如0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,6,6,6,6,6,6,6,0,0, 0,0.

我想对每段“angle_1frame_abs”列的值求和,并将其作为新列添加到 df,例如

计数:0,0,0,0,4,4,4,4,4,4,...

angle_1frame_abs: 2,1,3,4,2,2,2,3,4,3,...

新列:10,10,10,10,16,16,16,16,16,16,...

谢谢大家!

看来你需要的是将你的 df 分成具有相同连续值 Count 的段,并对每个段内的 angle_1frame_abs 求和,并将每个段的总和复制到每个段的行。

在您的情况下,我们不能使用 Count 作为 groupby 的密钥,因此我们需要一个新密钥:

new_key = (df['Count'].diff().abs() > 0).cumsum()

使用新密钥,我们可以求和:

the_sum = df.groupby( new_key )['angle_1frame_abs'].sum()

并通过新key

将求和结果复制回table
df['NewColumn'] = new_key.map(the_sum)

注意,我们用diff()找出线段的边界,用abs() > 0把边界值转换成True/False1/0,然后用cumsum 通过利用 cumsum 不会在边界外(即段内)发生变化的事实来获取新密钥。

我使用以下假数据测试了我的代码

df = pd.DataFrame({
    'Count': [2,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,6,6,6,6,6,6,6,0,0,0,1], 
    'angle_1frame_abs': [np.nan,0,0,0,4,4,4,4,4,4,1,1,1,1,1,1,6,6,6,6,6,6,6,2,2,2,2],
})