Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在各列之间进行累积求和,并在另一个新列中获得结果_Python_Pandas_Cumsum - Fatal编程技术网

Python在各列之间进行累积求和,并在另一个新列中获得结果

Python在各列之间进行累积求和,并在另一个新列中获得结果,python,pandas,cumsum,Python,Pandas,Cumsum,我有一个dataframe,它有col1-col10,我想计算列之间的累积和,并在运行中创建新列,即cum_col1-cum_col10。我查看了cumsum(),但这给出了最终的累积和。如何在创建新列时实现累计和 Dataframe看起来像: id col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 1 5 5 5 5 0 0 1 4 3 3 2 0 0

我有一个dataframe,它有col1-col10,我想计算列之间的累积和,并在运行中创建新列,即cum_col1-cum_col10。我查看了cumsum(),但这给出了最终的累积和。如何在创建新列时实现累计和

Dataframe看起来像:

id    col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
1     5    5     5   5    0    0    1    4    3    3 
2     0    0     0   0    0    0    4    4    0    0 
3     0    1     2   3    0    0    0    5    6    0
预期成果:

id  cum_col1 cum_col2 cum_col3 cum_col4 cum_col5 cum_col6 cum_col7 cum_col8 cum_col9 cum_col10
1   5        10       15       20       20       20       21       25       28       31 
2   0        0        0        0        0        0        4        8        8        8 
3   0        1        3        6        6        6        6        11       17       17
要生成数据帧的DDL:

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3],
                   'col1': [5, 0, 0],
                   'col2': [5, 0, 1],
                   'col3': [5, 0, 2],
                   'col4': [5, 0, 3],
                   'col5' : [0, 0, 0],
                   'col6': [0, 0, 0],
                   'col7': [1, 4, 0],
                   'col8': [4, 4, 5],
                   'col9': [3, 0, 6],
                   'col10': [3, 0, 0]})

谢谢

您可以对每行应用匿名函数:

df = df.groupby('id').apply(lambda x: x.drop('id', axis=1).add_prefix('cum_').cumsum(axis=1).sum()).reset_index()
函数
add_prefix()
允许您为每个列名添加前缀

结果:

   id  cum_col1  cum_col2  cum_col3  ...  cum_col7  cum_col8  cum_col9  cum_col10
0   1         5        10        15  ...        21        25        28         31
1   2         0         0         0  ...         4         8         8          8
2   3         0         1         3  ...         6        11        17         17

您可以对每一行应用匿名函数:

df = df.groupby('id').apply(lambda x: x.drop('id', axis=1).add_prefix('cum_').cumsum(axis=1).sum()).reset_index()
函数
add_prefix()
允许您为每个列名添加前缀

结果:

   id  cum_col1  cum_col2  cum_col3  ...  cum_col7  cum_col8  cum_col9  cum_col10
0   1         5        10        15  ...        21        25        28         31
1   2         0         0         0  ...         4         8         8          8
2   3         0         1         3  ...         6        11        17         17

如果您将
id
列隐藏到索引中,那么
cumsum
方法就会起作用:

df.set_index('id', append=True).cumsum(axis=1).rename(
    columns = lambda x: 'cum_' + x).reset_index(level='id')
Ig给出了预期的结果:

   id  cum_col1  cum_col2  cum_col3  ...  cum_col7  cum_col8  cum_col9  cum_col10
0   1         5        10        15  ...        21        25        28         31
1   2         0         0         0  ...         4         8         8          8
2   3         0         1         3  ...         6        11        17         17

如果您将
id
列隐藏到索引中,那么
cumsum
方法就会起作用:

df.set_index('id', append=True).cumsum(axis=1).rename(
    columns = lambda x: 'cum_' + x).reset_index(level='id')
Ig给出了预期的结果:

   id  cum_col1  cum_col2  cum_col3  ...  cum_col7  cum_col8  cum_col9  cum_col10
0   1         5        10        15  ...        21        25        28         31
1   2         0         0         0  ...         4         8         8          8
2   3         0         1         3  ...         6        11        17         17

谢谢@obchardon!成功了。我只是想澄清一下,为什么我们需要groupby在这里。谢谢@obchardon!成功了。我只是想澄清一下,为什么我们需要groupby呢。