首页 > 解决方案 > Python - 如何根据列的值进行累积和

问题描述

我有一个数据框,我想添加一列,该列应该是其中一列的累积和,但前提是另一列的值是特定的。

例如,我的数据框如下:

| Type | Quantity |

| A | 30 |

| B | 10 |

| B | 5 |

| A | 3 |

我想添加一个列SumA,它只会在Type == A.

我试过这个:

data['SumA'] = data['Quantity'].cumsum() if data[(data['Type'] == 'A')]

我不断收到错误,我不确定如何解决它们,有人可以帮帮我吗?

谢谢你和亲切的问候,

我想得到这样的东西:

| Type | Quantity | Sum A | Sum B |

| A | 30 | 30 | 0 |

| B | 10 | 30 | 10 |

| B | 5 | 30 | 15 |

| A | 3 | 33 | 15 |

标签: pythoncumsum

解决方案


我想到了一些可以肯定可以优化的通用解决方案(我将尝试并继续努力):

因此,我们遍历Type列的唯一值以创建sum{value}列,然后每列将包含cumsum其尊重的Type值,而不匹配的值将是NaN

然后我用最接近的有效值填充这些NaN值,最后一行是为了满足该行中的第一项是NaN并且需要是的特殊情况0

for column in data['Type'].unique():
  column_name = f'sum{column}'
  data[column_name] = data[data['Type'] == column]['Quantity'].cumsum()
  data[column_name].fillna(method='ffill', inplace=True)
  data[column_name].fillna(value=0, inplace=True)

输出:

    Type    Quantity    sumA   sumB
0   A       30          30.0   0.0
1   B       10          30.0   10.0
2   B       5           30.0   15.0
3   A       3           33.0   15.0

推荐阅读