【发布时间】:2021-04-02 17:58:50
【问题描述】:
我的数据:
df = pd.DataFrame(
{
"City": ["NY", "NY", "LA", "LA", "MIA", "MIA"],
"Mall": ["A", "A", "B", "B", "C", "C"],
"Category": ["Milk", "Egg", "Egg", "Beef", "Egg", "Orange"],
"Price": [5, 10, 4, 9, 6, 11]
}
)
df
df = df.set_index(['City', 'Mall', 'Category'])
df
看起来像:
Price
City Mall Category
NY A Milk 5
Egg 10
LA B Egg 4
Beef 9
MIA C Egg 6
Orange 11
(数据必须是多索引形式)
起初我尝试了以下计算,结果完美:
df['Price_diff'] = df['Price'].groupby(level=[0,1]).pct_change(periods=-1)
df
>>>
Price Price_diff
City Mall Category
NY A Milk 5 -0.500000
Egg 10 NaN
LA B Egg 4 -0.555556
Beef 9 NaN
MIA C Egg 6 -0.454545
Orange 11 NaN
然后,对于每个城市、商场和类别,我想将价格差异与鸡蛋进行比较。我写道:
df['Price_diff'] = df['Price'].sub(df['Price'].where(df['Category'].eq('Egg')).groupby(level=[0,1]).transform('first'))
这是我收到错误消息的时候:
KeyError: 'Category'
为什么会发生这种情况,我该怎么办?
预期结果:
Price Price_diff
City Mall Category
NY A Milk 5 -5
Egg 10 0
LA B Egg 4 0
Beef 9 5
MIA C Egg 6 0
Orange 11 5
【问题讨论】:
-
df['Category]不起作用,因为类别设置为索引而不是列。这可能有助于stackoverflow.com/questions/28140771/… 仅选择一个索引