2012-12-24 127 views
7

如何使用分層索引更改DataFrame中的每個元素?例如,也許我想字符串轉換成浮動:使用分層索引更改數據幀中的數據

from pandas import DataFrame 
f = DataFrame({'a': ['1,000','2,000','3,000'], 'b': ['2,000','3,000','4,000']}) 
f.columns = [['level1', 'level1'],['item1', 'item2']] 
f 
Out[152]: 
     level1 
    item1 item2 
0 1,000 2,000 
1 2,000 3,000 
2 3,000 4,000 

我嘗試這樣做:

def clean(group): 
    group = group.map(lambda x: x.replace(',', '')) 
    return group 
f.apply(clean) 
Out[153]: 
(level1, item1) (level1, item2) 
0 1000 2000 
1 2000 3000 
2 3000 4000 

正如你所看到的,它改變了分層索引不少。我怎樣才能避免這種情況?或者也許有更好的方法。

感謝

回答

4

傳遞axis選項將apply功能:

In [265]: f.apply(clean, axis=1) 
Out[265]: 
    level1 
    item1 item2 
0 1000 2000 
1 2000 3000 
2 3000 4000 

當兩個軸均有層次指數這裏有一個解決方法:

In [316]: f.index = [[1,2,3],[1,2,3]] 

In [317]: f 
Out[317]: 
    level1 
    item1 item2 
1 1 1,000 2,000 
2 2 2,000 3,000 
3 3 3,000 4,000 

In [314]: f.apply(clean, axis=1).reindex(f.index) 
Out[314]: 
    level1 
    item1 item2 
1 1 1000 2000 
2 2 2000 3000 
3 3 3000 4000 
+0

大。當我使用axis = 0時,是否應用通過包括item1,item2的列?在列和行中存在分層索引時會發生什麼? –

+0

呃...我已經嘗試過這個,它會「平整」這個關卡。你知道這個問題的解決方法嗎? –

+0

@RobertSmith你使用的是什麼版本的熊貓?在'0.10'上它不會變扁(儘管'applymap'的確如此)。 –