python - 如果列的总和等于单个列,则删除一行

标签 python pandas

我有一个如下所示的数据框:

 Id   Var1_Belgium   var1_France  var1_Germany
 x     1               2            0
 y     1               0            0
 z     0               2            0
 u     1               3            2
 v     1               0            4

我想要的是删除我只观察一个国家信息的任何行。 因此,如果除一个国家以外的所有国家/地区的值(value)都等于零,我想省略该行。 数据框中有几十个国家。

考虑此问题的另一种方法是,如果所有 var1 的总和等于 var1 的单个列,则应删除该行。不确定这是否会使它更容易。

这是应该发生的事情:

 Id   Var1_Belgium   var1_France  var1_Germany
 x     1               2            0
 u     1               3            2
 v     1               0            4

因此,应删除只有 1 个国家/地区具有非零值的任何行。

注意:列和变量比上面的多。

我正在尝试为具有数百万个观察值的 df 执行此操作,最好采用有效的方法。

最佳答案

您可以使用 filter() 仅选择 var1_ 列,然后使用 (r != 0).sum() 条件- 它会给你 0 (False) 和 1 (True) 的总和。因此,如果总和大于 1 - 这意味着不止一个国家​​具有非零值:

In [52]: df
Out[52]:
   Id  var1_Belgium  var1_France  var1_Germany
0   1             0            0           122
1   2             0          100           120
2   3           100            0             0
3   4             5            6             7
4   5            11           12            13

In [55]: df.filter(like='var1_').apply(lambda r: (r != 0), axis=1)
Out[55]:
  var1_Belgium var1_France var1_Germany
0        False       False         True
1        False        True         True
2         True       False        False
3         True        True         True
4         True        True         True


In [53]: df.filter(like='var1_').apply(lambda r: (r != 0).sum() > 1, axis=1)
Out[53]:
0    False
1     True
2    False
3     True
4     True
dtype: bool

结果

In [54]: df[df.filter(like='var1_').apply(lambda r: (r != 0).sum() > 1, axis=1)]
Out[54]:
   Id  var1_Belgium  var1_France  var1_Germany
1   2             0          100           120
3   4             5            6             7
4   5            11           12            13

关于python - 如果列的总和等于单个列,则删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053065/

相关文章:

python - 如何在三向表中使用 pandas 交叉表获取行百分比?

python - Microsoft Graph API 的 "Access is denied. Check credentials and try again"

python - 如何使用flask-sqlalchemy从多个表中获取数据

java - Tomcat 中相同的 tensorflow 模型推理从简单的 Java 应用程序中得到不同的结果

python - 在 Python 中使用 Pandas 查找每日最大小时数

python - 使用 Pandas 的 numpy 插值

python - With Django 1. 8's show_change_link, "Save”按钮返回错误页面

Python 聚类 'purity' 指标

python - 来自 Pandas 数据框的烛台图,按日期替换索引

pandas:无法从重复轴重新索引