2013-02-22 52 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