Python 数据透视数据帧和多列布尔比较

Python 数据透视数据帧和多列布尔比较,python,pandas,pivot,booleanquery,Python,Pandas,Pivot,Booleanquery,我有一个数据透视框的形式 Price Units Buyer B G S B G S Idx 1 0 1.51 0 0 11 0 2 2.32 1.32 0 21 13 0 3 0 0 1.44 0 0 14 我正在尝试创建另一个名为“F

我有一个数据透视框的形式

      Price             Units  
Buyer     B     G     S     B   G   S
Idx                                  
1         0  1.51     0     0  11   0
2      2.32  1.32     0    21  13   0
3         0     0  1.44     0   0  14
我正在尝试创建另一个名为“Flag”的主列,其中包含B、G、S子列,使用的逻辑可以被认为是(逐单元格)

我尝试了很多方法,下面的方法比其他方法更接近

newp = p.join(((p['Price'] < 2.0) & (p['Units'] > 13.5)).rename(columns=dict(Price='Flag')))

我认为您需要将字符串数字转换为浮点数,然后使用:


我认为您需要将字符串数字转换为浮点数,然后使用:


使用
'Price'
上的双括号保留多索引,并在删除多索引的第一级后与
'Units'
逻辑组合。这样,左边的级别自然地与来自
'Price'

说够了。注意:

p[['Price']].lt(2) & p.Units.gt(13.5)

       Price              
Buyer      B      G      S
Idx                       
1      False  False  False
2      False  False  False
3      False  False   True
现在剩下的就是重命名
“Price”
加入

p.join(
    (
        p[['Price']].lt(2) & p.Units.gt(13.5)
    ).rename(columns=dict(Price='Flag'))
)

      Price             Units               Flag              
Buyer     B     G     S     B     G     S      B      G      S
Idx                                                           
1      0.00  1.51  0.00   0.0  11.0   0.0  False  False  False
2      2.32  1.32  0.00  21.0  13.0   0.0  False  False  False
3      0.00  0.00  1.44   0.0   0.0  14.0  False  False   True

使用
'Price'
上的双括号保留多索引,并在删除多索引的第一级后与
'Units'
逻辑组合。这样,左边的级别自然地与来自
'Price'

说够了。注意:

p[['Price']].lt(2) & p.Units.gt(13.5)

       Price              
Buyer      B      G      S
Idx                       
1      False  False  False
2      False  False  False
3      False  False   True
现在剩下的就是重命名
“Price”
加入

p.join(
    (
        p[['Price']].lt(2) & p.Units.gt(13.5)
    ).rename(columns=dict(Price='Flag'))
)

      Price             Units               Flag              
Buyer     B     G     S     B     G     S      B      G      S
Idx                                                           
1      0.00  1.51  0.00   0.0  11.0   0.0  False  False  False
2      2.32  1.32  0.00  21.0  13.0   0.0  False  False  False
3      0.00  0.00  1.44   0.0   0.0  14.0  False  False   True

很好的解决方案。aType(float)是我的一个错误。我知道所有的事实,所以我有点奇怪,但我发现了问题。你也可以投票。谢谢,很好的解决方案。aType(float)是我的一个错误。我知道所有的事实,所以我有点奇怪,但我发现了问题。你也可以投票。谢谢
p = p.astype(float)

a = (p['Price'] < 2.0) & (p['Units'] > 13.5)
a.columns = pd.MultiIndex.from_product([['Flag'],a.columns])
p = p.join(a)
print (p)
      Price             Units               Flag              
Buyer     B     G     S     B     G     S      B      G      S
Idx                                                           
1      0.00  1.51  0.00   0.0  11.0   0.0  False  False  False
2      2.32  1.32  0.00  21.0  13.0   0.0  False  False  False
3      0.00  0.00  1.44   0.0   0.0  14.0  False  False   True
p[['Price']].lt(2) & p.Units.gt(13.5)

       Price              
Buyer      B      G      S
Idx                       
1      False  False  False
2      False  False  False
3      False  False   True
p.join(
    (
        p[['Price']].lt(2) & p.Units.gt(13.5)
    ).rename(columns=dict(Price='Flag'))
)

      Price             Units               Flag              
Buyer     B     G     S     B     G     S      B      G      S
Idx                                                           
1      0.00  1.51  0.00   0.0  11.0   0.0  False  False  False
2      2.32  1.32  0.00  21.0  13.0   0.0  False  False  False
3      0.00  0.00  1.44   0.0   0.0  14.0  False  False   True