
本教程详细阐述了如何在Pandas DataFrame中处理包含多个逻辑分段的数据,并对每个分段内符合特定条件的数值进行累计求和。文章通过具体示例代码,展示了如何识别数据分段、提取子DataFrame、执行条件过滤,并使用累加器变量实现最终的单一总和,从而避免了获取多个独立求和结果的常见问题。
在数据分析实践中,我们经常会遇到DataFrame中包含多个逻辑上独立的数据块或“分段”的情况。这些分段可能由特定的标记行(如“START”和“END”)分隔,而我们的任务通常是对每个分段内符合特定条件的数值进行聚合操作,例如求和。一个常见的挑战是,如果在循环中直接对每个分段的结果进行求和并打印,我们会得到多个独立的和,而不是一个最终的累计总和。本教程将指导您如何有效地解决这一问题,实现分段数据的精确累计求和。
首先,我们构建一个模拟的Pandas DataFrame,它包含了多个逻辑分段。每个分段由Type列中的特定值(例如“Dog”作为开始,“Cat”作为结束)定义。
import pandas as pd
# 示例数据
data = {
'Type': ['Dog', '', '', 'Cat', '', '', 'Dog', '', '', 'Cat'],
'breed': ['', 'Wolf', 'bork', '', '', '', '', 'Wolf', 'bork', ''],
'Age': [20, 21, 19, 18, 20, 21, 19, 15, 16, 0]
}
data = pd.DataFrame(data)
print("原始DataFrame:")
print(data)输出:
原始DataFrame: Type breed Age 0 Dog 20 1 Wolf 21 2 bork 19 3 Cat 18 4 20 5 21 6 Dog 19 7 Wolf 15 8 bork 16 9 Cat 0
接下来,我们需要确定每个逻辑分段的起始和结束索引。这可以通过查找Type列中特定标记值(如“Dog”表示开始,“Cat”表示结束)的索引来实现。
# 确定每个分段的起始索引
Start = (data['Type'].index[data['Type'] == 'Dog']).astype(int)
# 确定每个分段的结束索引
End = (data['Type'].index[data['Type'] == 'Cat']).astype(int)
print("\n分段起始索引 (Start):", Start)
print("分段结束索引 (End):", End)输出:
分段起始索引 (Start): Int64Index([0, 6], dtype='int64') 分段结束索引 (End): Int64Index([3, 9], dtype='int64')
原始问题中,用户在循环内对每个分段的求和结果进行打印,导致输出了多个独立的和。要获得一个单一的累计总和,我们需要引入一个累加器变量,并在循环中不断更新它。
以下是实现累计求和的步骤:
import pandas as pd
# 示例数据
data = {
'Type': ['Dog', '', '', 'Cat', '', '', 'Dog', '', '', 'Cat'],
'breed': ['', 'Wolf', 'bork', '', '', '', '', 'Wolf', 'bork', ''],
'Age': [20, 21, 19, 18, 20, 21, 19, 15, 16, 0]
}
data = pd.DataFrame(data)
# 确定每个分段的起始索引
Start = (data['Type'].index[data['Type'] == 'Dog']).astype(int)
# 确定每个分段的结束索引
End = (data['Type'].index[data['Type'] == 'Cat']).astype(int)
# 初始化一个累加器变量,用于存储所有分段的总和
total_sum = 0
# 遍历每个分段
for index, value in enumerate(Start):
# 提取当前分段的子DataFrame
# 注意:End[index] 确保了Start和End索引的对应关系
Frip = data.iloc[int(value) : End[index]]
# 在当前分段中,过滤出 'breed' 为 'Wolf' 的行,并选择 'Age' 列
# 将 'Age' 列转换为数值类型,然后求和
section_sum = pd.to_numeric(Frip.query('breed == "Wolf"').Age).sum()
# 将当前分段的和累加到 total_sum
total_sum += section_sum
# 打印最终的累计总和
print("\n所有分段中 'Wolf' 类型的累计年龄总和:", total_sum)所有分段中 'Wolf' 类型的累计年龄总和: 36
通过遵循上述方法,您可以高效且准确地处理Pandas DataFrame中的分段数据,并获得所需的累计聚合结果。
以上就是累计求和:Pandas DataFrame分段数据处理与聚合的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号