python - 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 |
解决方案
我想到了一些可以肯定可以优化的通用解决方案(我将尝试并继续努力):
因此,我们遍历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
推荐阅读
- python - 如何在 Python 中等待 elasticsearch helpers.reindex 完成?
- windows - 在 Windows 10 中创建新文本文件时更改默认扩展名
- c# - DeviceIoControl 返回 1306 和 IOCTL_SCSI_PASS_THROUGH
- firebase - 如何在 Firebase 函数中将 Firebase Firestore 时间戳转换为 Zulu 日期时间格式
- android - 带有列表视图的自定义导航视图列表
- python - 在 Lambda Stack 上安装 Faiss
- python - 处理数据框时出现 if 语句错误
- python - 如何通过 tkinter 绑定传递更多参数
- java - 'UserDetailsService' 类型的 bean 不止一个。Beans:inMemoryUserDetailsManager
- c++ - 如何在不违反 C++ 核心准则的情况下将整数转换为 void*?