pandas - 对 pandas 列求和,不包括基于其他列值的某些行
问题描述
我正在尝试从测试群体中确定小部件故障的数量。
每个小部件都可能以 0、1 或多种方式失败。我想计算每种失败方法的失败次数,但是一旦已知小部件失败,就应该将其从未来的总和中排除。换句话说,故障模式是已知的和有序的。如果小部件通过模式 1 和模式 3 失败,我不关心模式 3:我只想计算模式 1。
我有一个数据框,每个项目一行,每个故障模式一列。如果小部件在该模式下失败,则列值为 1,否则为 0。
d = {"item_1":
{"failure_1":0, "failure_2":0},
"item_2":
{"failure_1":1, "failure_2":0},
"item_3":
{"failure_1":0, "failure_2":1},
"item_4":
{"failure_1":1, "failure_2":1}}
df = pd.DataFrame(d).T
display(df)
输出:
failure_1 failure_2
item_1 0 0
item_2 1 0
item_3 0 1
item_4 1 1
如果我只想对列求和,那很简单:df.sum()
. 如果我想计算失败百分比,也很容易:df.sum()/len(df)
. 但这会计算以多种方式多次失败的小部件。对于所述问题,我能想到的最好的方法是:
# create empty df to store results
df2 = pd.DataFrame(columns=["total_failures"])
for col in df.columns:
# create a row, named after the column, and assign it the value of the sum
df2.loc[col] = df[col].sum()
# drop rows in the df column that are equal to 1
df = df.loc[df[col] != 1]
display(df2)
输出:
total_failures
failure_1 2
failure_2 1
这需要创建另一个数据框(这很好),但还需要遍历现有的数据框列并一次删除几行。如果数据框需要一段时间才能生成,或者需要用于未来的计算,则这是不可行的。我可以处理对列的迭代。
有没有办法在不删除原始 df 或制作临时副本的情况下做到这一点?(不适用于大型数据集。)
解决方案
推荐阅读
- python - pandas - DataError 没有要聚合的数字类型
- java - 需要触发 JavaFX TableView 的内置 Table Menu Button
- r - R 代码和 nycflights13 包中的数据探索分析
- javascript - 如何将axios转换为fetch?
- sql-server-2008 - 'INSERT' 和 'WHERE' 附近的语法不正确
- java - 我的数组列表显示的是对象地址而不是对象内容
- angularjs - AngularJs 承诺在失败时执行
- java - 如何以编程方式查询 p2 存储库以获取信息和工件?
- r - 在进行单变量拟合时在 mclust-package 中出现错误
- java - build.gradle 中的复制任务不会将编译依赖项放在一个目录中,而将 testCompile 依赖项放在另一个目录中