我正在使用 MultiIndexed 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)
我不知道这个错误是什么意思,但我觉得我正在从鼹鼠山中造出一座山。有谁知道这样做的正确方法?
在此先感谢,罗布