gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:07 24 4
gpt4 key购买 nike

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

 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com