我正在使用一个多级索引的pandas DataFrame,并想将DataFrame的子集乘以某个数字。
这与此问题相同,只是有了MultiIndex。
>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009],
'flavour':['strawberry','strawberry','banana','banana',
'strawberry','strawberry','banana','banana'],
'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
'sales':[10,12,22,23,11,13,23,24]})
>>> d = d.set_index(['year','flavour','day'])
>>> d
sales
year flavour day
2008 strawberry sat 10
sun 12
banana sat 22
sun 23
2009 strawberry sat 11
sun 13
banana sat 23
sun 24
到目前为止,一切都很好。但假设我发现所有星期六的数字只有应该有的一半!我想把所有 sat
的销售额乘以2。
我第一次尝试是:
sat = d.xs('sat', level='day')
sat = sat * 2
d.update(sat)
但这不起作用,因为变量sat
已经失去了索引的day
级别:
>>> sat
sales
year flavour
2008 strawberry 20
banana 44
2009 strawberry 22
banana 46
所以Pandas不知道如何将新的销售数据与旧的数据框联接。
我简单尝试了一下:
>>> sat = d.xs('sat', level='day', copy=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2248, in xs
raise ValueError('Cannot retrieve view (copy=False)')
ValueError: Cannot retrieve view (copy=False)
我不知道那个错误是什么意思,但感觉自己小题大做了。有人知道正确的做法吗?
先行致谢, 罗布