我有以下代码,
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)
答案 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