根据其他列中的值对列中的值求和并附加到 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/False
或1/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],
})
我有一个看起来像这样的 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
将求和结果复制回tabledf['NewColumn'] = new_key.map(the_sum)
注意,我们用diff()
找出线段的边界,用abs() > 0
把边界值转换成True/False
或1/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],
})