2013-02-22 25 views
1

是否有將附加描述性版本添加到索引列?熊貓:將描述性詞典()附加到分層索引(即CountryCode和CountryName)

例如,我使用ISO3 CountryCode從不同的數據源合併 'AUS' - > Australia等。這對合並不同的數據源非常方便,但是當我想打印數據時,我想要描述版本(即澳大利亞)。我正在想象一個連接到'CountryCode'索引列的字典(其中CountryCode是Key且CountryName是Value)和一個將打印Value而不是用於數據操作的Key的標誌。

是最好的解決方案來生成我自己的Dictionary(),然後當它打印或圖形然後合併國名的?這是可以的,除非所有數據集信息都在數據框對象中傳輸。

回答

1

我認爲最簡單的解決方案將它分爲兩​​欄,一欄是country_code和country_name(您可以將其命名爲其他內容)。

當您打印或繪圖時,您可以選擇使用哪一列。

+0

同意,除了我使用stack()和unstack()來重塑數據(即跨越多年平衡面板)。我寧願不要在這些樞紐中作爲指定的索引攜帶冗餘的CountryName信息,而是將索引保持爲用於快速引用的最小信息。在所有重塑之後,我可以將國名重新合併爲一個單獨的專欄。 – sanguineturtle 2013-02-22 04:02:13

+0

或者將column_codes保留爲columns_names,然後在重塑後再做'df ['country_name'] = df.country_code.apply(d.get)'? – 2013-02-22 04:06:47

+0

也許我應該投入更多時間到Panel()結構中,而不是三個層次元素:) – sanguineturtle 2013-02-22 04:09:14

0

索引選項的格式方法,可以讓你在一個函數的形式應用格式:

In [1]: df = DataFrame([1,2], index=['AUS','CAN']); df 
Out[1]: 
    0 
AUS 1 
CAN 2 

In [2]: d = {'AUS':'Australia', 'CAN':'Canada'} 

In [3]: df.index.format(formatter = lambda x: d.get(x, x)) 
Out[3]: ['Australia', 'Canada'] 

我不知道你會如何實際使用這一點,雖然。

+0

這看起來很有前途......我將更多地關注格式化程序。但是這個解決方案仍然需要我將DataFrame和CountryCode的Dict()維護爲CountryName映射,而不是將信息攜帶在單個DataFrame中。可能是這樣設計的,因爲在後續的合併/連接等中可能有有效的鍵,但不一定是有效的鍵名! – sanguineturtle 2013-02-22 04:21:14

+0

這很適合於在打印之前替換索引代碼等等... df = DataFrame([1,2],index = ['AUS','CAN']); DF d = { 'AUS': '澳大利亞', 'CAN': '坎達'} 然後使用 df.index = df.index.map(拉姆達X:d.get(X,X)) 我也會看看格式化程序!謝謝 – sanguineturtle 2013-02-22 04:26:43