从数据框中的列中条件值> 0的所有列中删除重复项

问题描述

我需要从所有列中删除重复项。

我的数据:

id   country  publisher   weak     A        B        C
123    US        X          1     6.77      0        0
123    US        X          1       0      1.23     88.7
456    BZ        Y          2       0      56.87    9.65      
456    BZ        Y          2     2.76       0       0  
456    BZ        Y          2       0        0       0

我使用了drop_duplicates-

df1=df.drop_duplicates()

但是我需要一个条件,该条件将使每个id的所有值均> 0。

此外,除了“ A”,“ B”,“ C”之外,我还有更多的列,因此我正在寻找一种解决方案,该考虑因素将所有列都考虑在内。

以下是我要查找的示例:

id   country  publisher  weak     A       B        C
123    US        X        1     6.77     1.23     88.7
456    BZ        Y        2     2.76     56.87    9.65

解决方法

这将为您提供所需的输出
groups=df.groupby(['id','country','publisher']).sum()

,

尝试做:

cols = ['A','B'] # change columns to aggregate more data

def app_func(s):
    return s[~s.eq(0)].bfill().dropna().drop_duplicates()

df.groupby(['id','publisher'])[cols].apply(app_func).reset_index()