pandas
支持多级列名:
>>> x = pd.DataFrame({'instance':['first','first','first'],'foo':['a','b','c'],'bar':rand(3)})
>>> x = x.set_index(['instance','foo']).transpose()
>>> x.columns
MultiIndex
[(u'first', u'a'), (u'first', u'b'), (u'first', u'c')]
>>> x
instance first
foo a b c
bar 0.102885 0.937838 0.907467
这个特性非常有用,因为它允许同一个 Dataframe 的多个版本“水平”地附加第一级列名(在我的示例中为instance
)来区分示例。
假设我已经有一个这样的dataframe:
a b c
bar 0.102885 0.937838 0.907467
有没有一个好的方法来添加另一个级别的列名,类似于行索引:
x['instance'] = 'first'
x.set_level('instance',append=True)
7条答案
按热度按时间snz8szmq1#
试试这个:
64jmpszr2#
无需创建元组列表
用途:
pd.MultiIndex.from_product(iterables)
结果 Dataframe :
Pull request from Jan 25, 2014
bhmjp9jg3#
可以使用
concat
。给予它一个dataframes的字典,其中的键是你想添加的新的列级别。可以使用相同的方法创建多个标高。
wfveoks04#
许多这些解决方案似乎只是比他们需要的更复杂一点。
当速度不是绝对必要的时候,我更喜欢让事情看起来尽可能简单和直观。我认为这个解决方案实现了这一点。早在
0.22.0
版本的pandas中进行了测试。只需创建一个DataFrame(在第一步中忽略列),然后将colums设置为等于列名的n-dim列表。
yvfmudvl5#
这是创建多级列和行的最简单、最容易的方法。
ddrv8njm6#
这里有一个可以帮助您创建元组的函数,它可以由pd.MultiIndex.from_tuples()使用,更一般一些。这个想法来自@user3377361。
它可以这样使用:
5tmbdcev7#
通过Carl改进
pd.concat
方法,如果每次迭代只得到一行,情况会如何?这不是一个优化的方法,但你可以这样做:结果:
| | 第一级|||第二级|||
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| IDX|一种|B| c型|一种|B| c型|
| 十个|0.89| 0.98|零点三一|零点二十九|0.63| 0.99|
| | 第一级|||第二级|||
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| IDX|一种|B| c型|一种|B| c型|
| 二十个|零点三四|0.78|零点三四|零点二三|0.26| 0.98|
| | 第一级|||第二级|||
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| IDX|一种|B| c型|一种|B| c型|
| 十个|0.89| 0.98|零点三一|零点二十九|0.63| 0.99|
| 二十个|零点三四|0.78|零点三四|零点二三|0.26| 0.98|