熊猫多索引无法正常工作

时间:2017-06-29 05:23:30

标签: pandas

我有以下代码,

purchase_1 = pd.Series({'Name': 'Chris', 'Item Purchased': 'Dog Food',                
'Cost': 22.50})
purchase_2 = pd.Series({'Name': 'Kevyn', 'Item Purchased': 'Kitty Litter',
                    'Cost': 2.50})
purchase_3 = pd.Series({'Name': 'Vinod', 'Item Purchased': 'Bird Seed',
                    'Cost': 5.00})

df = pd.DataFrame([purchase_1, purchase_2, purchase_3], 
index=['Store 1', 'Store 1', 'Store 2'])

我添加了以下代码来更改索引 - 但是,当追加新行时,它会给出奇怪的结果。请帮帮我:

df['location'] = df.index
df.set_index(['location', 'Name'])
df = df.append(pd.Series(data={'Cost': 3.00, 'Item Purchased': 'Kitty 
Food'}, name=('Store 2', 'Kevyn')))
print (df)

1 个答案:

答案 0 :(得分:0)

您忘了分配df

df['location'] = df.index
#assign back to df
df = df.set_index(['location', 'Name'])
df = df.append(pd.Series(data={'Cost': 3.00, 'Item Purchased': 'Kitty Food'},
                         name=('Store 2', 'Kevyn')))
print (df)
                Cost Item Purchased
location Name                      
Store 1  Chris  22.5       Dog Food
         Kevyn   2.5   Kitty Litter
Store 2  Vinod   5.0      Bird Seed
         Kevyn   3.0     Kitty Food

如果希望新的索引名称使用DataFrame.set_index,则更简单的解决方案为rename_axis,参数为append=True

df = df.set_index('Name', append=True).rename_axis(['location','Name'])
df = df.append(pd.Series(data={'Cost': 3.00, 'Item Purchased': 'Kitty Food'}, 
                         name=('Store 2', 'Kevyn')))
print (df)
                Cost Item Purchased
location Name                      
Store 1  Chris  22.5       Dog Food
         Kevyn   2.5   Kitty Litter
Store 2  Vinod   5.0      Bird Seed
         Kevyn   3.0     Kitty Food

如果没有必要的MultiIndex的第一级名称:

df = df.set_index('Name', append=True)
df = df.append(pd.Series(data={'Cost': 3.00, 'Item Purchased': 'Kitty Food'}, 
                         name=('Store 2', 'Kevyn')))
print (df)
               Cost Item Purchased
        Name                      
Store 1 Chris  22.5       Dog Food
        Kevyn   2.5   Kitty Litter
Store 2 Vinod   5.0      Bird Seed
        Kevyn   3.0     Kitty Food