Python 熊猫:将描述性Dict()附加到层次索引(即CountryCode和CountryName)

Python 熊猫:将描述性Dict()附加到层次索引(即CountryCode和CountryName),python,pandas,Python,Pandas,是否仍要将描述性版本附加到索引列 例如,我使用ISO3CountryCode从不同的数据源进行合并 'AUS'->Australia等。这对于合并不同的数据源非常方便,但是当我想要打印数据时,我希望使用描述版本(即澳大利亚)。我想象的是一个附在“CountryCode”(其中CountryCode是键,CountryName是值)索引列上的字典,以及一个将打印值而不是用于数据处理的键的标志 最好的解决方案是生成我自己的字典(),然后打印或绘制图表,然后将国家名称合并到其中?这是可以的,只是所有的

是否仍要将描述性版本附加到索引列

例如,我使用ISO3CountryCode从不同的数据源进行合并 'AUS'->Australia等。这对于合并不同的数据源非常方便,但是当我想要打印数据时,我希望使用描述版本(即澳大利亚)。我想象的是一个附在“CountryCode”(其中CountryCode是键,CountryName是值)索引列上的字典,以及一个将打印值而不是用于数据处理的键的标志


最好的解决方案是生成我自己的字典(),然后打印或绘制图表,然后将国家名称合并到其中?这是可以的,只是所有的数据集信息都可以在dataframe对象中携带

我认为最简单的解决方案是在您的数据框架中将其分为两列,一列表示国家代码和国家名称(您可以将它们命名为其他名称)


当您打印或绘制图表时,您可以选择使用哪一列。

我认为最简单的解决方案是在您的数据框中将其分为两列,一列表示国家代码和国家名称(您可以将它们命名为其他名称)


打印或绘制图表时,您可以选择使用哪一列。

索引选项有一种格式方法,允许您以函数的形式应用格式化程序:

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']

不过,我不确定您将如何实际使用它。

索引选项有一种格式方法,允许您以函数的形式应用格式化程序:

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']

不过,我不确定您将如何实际使用它。

同意,除了我经常使用stack()和unstack()来重塑数据(即,在不同年份获得平衡的面板)。我不希望将多余的CountryName信息作为这些数据透视中的指定索引进行传递,而是将索引保持在最小信息量,以便快速引用。在所有的重塑之后,我可以将国家名称合并为一个单独的列。或者保留一个dict/序列,将列代码与列名称合并,然后在重塑之后,执行
df['country\u name']=df.country\u code.apply(d.get)
?也许我应该在Panel()结构上投入更多的时间,而不是三个层次结构元素:)同意,除此之外,我经常使用stack()和unstack()来重塑数据(即,在不同年份获得平衡的面板)。我不希望将多余的CountryName信息作为这些数据透视中的指定索引进行传递,而是将索引保持在最小信息量,以便快速引用。在所有的重塑之后,我可以将国家名称合并为一个单独的列。或者保留一个dict/序列,将列代码与列名称合并,然后在重塑之后,执行
df['country\u name']=df.country\u code.apply(d.get)
?也许我应该在面板上投入更多的时间()结构而不是三个层次元素:)这看起来很有希望。。。我将进一步研究格式化程序。但是这个解决方案仍然需要我维护CountryCode到CountryName映射的数据帧和Dict(),而不是在单个数据帧中携带信息。可能是这样设计的,因为在后续合并/联接等时可能会有有效的键,但不一定是有效的键名!这可以很好地替代打印前的索引代码等。。。df=数据帧([1,2],索引=['AUS','CAN']);dfd={'AUS':'Australia','CAN':'Canda'}然后使用df.index=df.index.map(lambda x:d.get(x,x))我还将研究格式化程序!谢谢这看起来很有希望。。。我将进一步研究格式化程序。但是这个解决方案仍然需要我维护CountryCode到CountryName映射的数据帧和Dict(),而不是在单个数据帧中携带信息。可能是这样设计的,因为在后续合并/联接等时可能会有有效的键,但不一定是有效的键名!这可以很好地替代打印前的索引代码等。。。df=数据帧([1,2],索引=['AUS','CAN']);dfd={'AUS':'Australia','CAN':'Canda'}然后使用df.index=df.index.map(lambda x:d.get(x,x))我还将研究格式化程序!谢谢