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