gpt4 book ai didi

python - 将某些行提升为有序 pandas 数据帧中的索引

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:59 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

df=pd.DataFrame(index=['Asia','China','India','Europe','France','Hungary'])
df[2008]=20080
df[2009]=20090
df.loc['Europe']=np.NaN
df.loc['Asia']=np.NaN
print df

2008 2009
Asia NaN NaN
China 20080 20090
India 20080 20090
Europe NaN NaN
France 20080 20090
Hungary 20080 20090

我想“促进”欧洲和亚洲成为多重指数,比其组成国家高一级,以获得 yield :

                  2008   2009
Asia China 20080 20090
India 20080 20090
Europe France 20080 20090
Hungary 20080 20090

知道这些可提升的行全部都是 NaN,这是否可能以一种漂亮的方式实现?

最佳答案

您可以使用 cumsum() 来完成此操作:

In [11]: cont = df.isnull().all(1)

In [12]: cont
Out[12]:
Asia True
China False
India False
Europe True
France False
Hungary False
dtype: bool

这使您能够为每行标记大陆*:

In [13]: continents = df.index[cont][cont.cumsum() - 1]

In [14]: continents
Out[14]: Index([u'Asia', u'Asia', u'Asia', u'Europe', u'Europe', u'Europe'], dtype='object')

In [15]: df.set_index([continents, df.index], inplace=True)

In [16]: df
Out[16]:
2008 2009
Asia Asia NaN NaN
China 20080 20090
India 20080 20090
Europe Europe NaN NaN
France 20080 20090
Hungary 20080 20090

In [17]: df.dropna()
Out[17]:
2008 2009
Asia China 20080 20090
India 20080 20090
Europe France 20080 20090
Hungary 20080 20090
<小时/>

* 注意:不执行此步骤并在 MultiIndex 中设置级别可能会更有效:

In [21]: res = df.set_index([cont, df.index])

In [21]: res.index = res.index.set_levels(df.index[cont], 0)

此外,您可以在不使用 NaN 的情况下构建此代码(这样您就不必在之后删除 na)。

<小时/>

注意:在读入数据时(即在构造/连接期间)执行此操作可能会更有效...

关于python - 将某些行提升为有序 pandas 数据帧中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com