【问题标题】:Calculating in dataframe - why am I getting KeyError here?在数据框中计算 - 为什么我在这里得到 KeyError?
【发布时间】: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

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

好的。所以Category是dataframe中的一个索引,不能用df["Category"]访问。相反,您可以使用df.index.get_level_values(2)。代码如下:

df['Price_diff'] = df['Price'].sub(df['Price'].where(df.index.get_level_values(2) == 'Egg').groupby(level=[0,1]).transform('first'))
df

输出是:

                    Price  Price_diff
City Mall Category                   
NY   A    Milk          5        -5.0
          Egg          10         0.0
LA   B    Egg           4         0.0
          Beef          9         5.0
MIA  C    Egg           6         0.0
          Orange       11         5.0

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 2021-11-08
    • 2016-11-22
    • 2015-10-25
    • 1970-01-01
    • 2016-09-26
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多