我有一个表格的旋转数据框
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
我正在尝试使用可以被认为是(逐个单元格)的逻辑创建另一个名为“标志”的主要列,其中包含 B、G、S 子列
p['Flag'] = (p['Price'] < 2.0) & (p['Units'] > 13.5)
所以想要的结果(只显示新列)
Flag
Buyer B G S
Idx
1 False False False
2 False False False
3 False False True
我尝试了很多方法,以下方法比其他方法更接近
newp = p.join(((p['Price'] < 2.0) & (p['Units'] > 13.5)).rename(columns=dict(Price='Flag')))
但这有两个问题
- 右下角的布尔输出不正确。这应该是正确的,因为相应的单元格价格小于 2.0 并且相应的单元格单元大于 13.5。
- 它给出警告“用户警告:不同级别之间的合并可能会产生意想不到的结果(左侧 2 个级别,右侧 1 个级别)”。我似乎无法将主要列名“标志”放入数据框中。
关于修复布尔条件并在正确级别合并的任何想法?
生成初始数据帧的代码是
from collections import OrderedDict
import pandas as pd
table = OrderedDict((
("Idx", [1, 2, 2, 3]),
('Buyer',['G', 'B', 'G', 'S']),
('Price', ['1.51', '2.32', '1.32', '1.44']),
('Units', ['11', '21', '13', '14'])
))
d = pd.DataFrame(table)
p = d.pivot(index='Idx', columns='Buyer')
p.fillna(0, inplace=True)