Python 使用pivot函数后的数据帧过滤

Python 使用pivot函数后的数据帧过滤,python,pandas,Python,Pandas,有人能帮我解决当前的错误吗,或者建议另一种方法? 提前多谢 我有以下数据框,如下所示:- GroupName Id Type1 Type2 Type 3 ABC 1 100 0 0 2 0 -100 0 3 0 100 100 DEF 4 10

有人能帮我解决当前的错误吗,或者建议另一种方法? 提前多谢

我有以下数据框,如下所示:-

GroupName  Id     Type1     Type2      Type 3
ABC         1       100       0            0
            2         0      -100          0 
            3         0       100         100
DEF         4       100       0            0 
            5        0        100          0
我想过滤数据帧,使其返回一个或多个列(Type1/Type2/Type3)具有+ve和-ve值的所有行和组名

上述df中的输出仅返回

GroupName  Id     Type1     Type2      Type 3
ABC         1       100       0            0
            2         0      **-100**          0 
            3         0       100         **100**
我试过了

df[df.gt(0).any(axis=1) & df.lt(0).any(axis=1)]
获取错误

    if level_codes[key] == -1:
IndexError: index 0 is out of bounds for axis 0 with size 0
我使用数据透视表创建了这个df

df= old_df.pivot_table(index=["GroupName","Id"], columns="Type", values="Value",
                                              aggfunc=np.sum)
IIUC:


我无法重现这个错误。有了提供的数据,我得到了一个空的数据框,这是有意义的。我认为OP的目标是第一个索引级别
ABC
,因为它既有pos值也有neg值<代码>定义没有负。哦,对于整个段。好的,那可能行。是的,光环是right@QuangHoang我的回答是否符合你的想法?谢谢你的回答,我没有解释清楚。。我要找的不是将-100的值更改为-100。**是输入错误,我试图将其加粗,我想过滤数据框,以便它返回一个或多个列(Type1/Type2/Type3)具有+ve和-ve值的所有行和组名。因此,我只得到组类型ABC及其所有Id行,因为该组有+ve和-ve值。我没有得到组类型DEF及其所有ID行,因为该组只有+ve值。我想我现在明白了。我相信这正是我所提供的。请注意,只返回了
GroupName
等于
'ABC'
。它将返回相同的数据帧运行
df.head().to_dict()
,并用结果更新您的问题或用结果回复此注释。抱歉,专有数据不想在此处共享而陷入麻烦。让我看看我是否能理解你的逻辑。您拾取每个组名并将其传递给posandneg(d),然后被这行return np.in1d([1,-1],np.sign(d)).all()所迷惑。不检查两个数组值是否相等,然后返回True\False。该值可以是任何列中的任何+ve数字或-ve数字。您使用的是[1,-1]。如果我遗漏了什么,我会道歉。还在学习python吗
import numpy as np
import pandas as pd

def posandneg(d):
    return np.in1d([1, -1], np.sign(d)).all()

df.groupby(level=0).filter(posandneg)

             Type1 Type2 Type 3
GroupName Id                   
ABC       1    100     0      0
          2      0  -100      0
          3      0   100    100
​