尝试使用Python/pandas基于另一个数据帧的列的内部总和创建一个新的数据帧

问题描述 投票:0回答:2

假设我有一个 pandas 数据框 df 如下:

df = DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8]})

    Col1 Col2
0      1      5
1      2      6
2      3      7
3      4      8

有没有办法让我将一列更改为该列中所有以下元素的总和?

例如,对于“Col1”,结果将是:

    Col1   Col2
0     10      5
1      9      6
2      7      7
3      4      8

1 变成 1 + 2 + 3 + 4 = 10
2 变成 2 + 3 + 4 = 9
3 变成 3 + 4 = 7
4 剩下 4

如果这是可能的,有没有办法让我指定一个截止索引,之后会发生此行为?例如,如果截止索引是键 1,则结果将是:

    Col1   Col2
0      1      5
1      2      6
2      7      7
3      4      8

我认为除了使用循环之外没有其他方法可以做到这一点,但我认为可能有一种使用矢量化计算的方法。

谢谢大家

python indexing pandas sum dataframe
2个回答
1
投票

这是避免循环的一种方法。

import pandas as pd

your_df = pd.DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8]})

def your_func(df, column, cutoff):
    # do cumsum and flip over
    x = df[column][::-1].cumsum()[::-1]
    df[column][df.index > cutoff] = x[x.index > cutoff]     
    return df

# to use it
your_func(your_df, column='Col1', cutoff=1)

Out[68]: 
   Col1  Col2
0     1     5
1     2     6
2     7     7
3     4     8

1
投票

是的,你可以使用循环,但非常便宜:

def sum_col(column,start=0):
    l = len(column)
    return [column.values[i:].sum() for i in range(start,l)]

及用法:

data['Col1'] = sum_col(data['Col1'],0)
© www.soinside.com 2019 - 2024. All rights reserved.