修复:作为索引器提供的不可对齐的布尔系列尝试在列之间进行乘法运算

时间:2019-08-29 20:57:23

标签: python-3.x pandas pivot-table

我创建了一个数据透视表数据框,该数据框具有一列名称和4列int64。

issuer = pos.pivot_table(index="Issuer", columns="AssetType", 
values="MarketValue", aggfunc=np.sum)

我需要找到所有数字组合为正整数和负整数的所有行。

我尝试了两种方法来解决此问题。首先定义def product_all,并在遍历每行/组合时使用itertools.product。

def product_all(row):
    list_iter = list(row)
     for x, y in itertools.product(list_iter, repeat=2):
        if x*y >= 0:
            return True
        else:
            return False

另一个只是使用.any()并查找值>和<0。

issuer = issuer[((issuer[col] > 0).any()) & ((issuer[col] < 0).any())]

这是我df的head()

AssetType                    Bond  CDS  Equity         Loan
Issuer                                                     
Name1                         0.0 -0.0     0.0   6900238.93
Name2                         0.0 -0.0     0.0  12130000.00
Name3                         0.0 -0.0     0.0   8501753.71
Name4                         0.0 -0.0     0.0  25255509.41
Name5                         0.0 -0.0     0.0  21746971.29

当我两个都运行时,我得到相同的错误: pandas.core.indexing.IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列的索引与索引对象的索引不匹配

当我打印x,y时,我得到了我期望的准确组合。不知道我的代码在哪里中断。

1 个答案:

答案 0 :(得分:1)

您需要在any中使用axis=1

尝试:

issuer[issuer.gt(0).any(axis=1) & issuer.lt(0).any(axis=1)]