gpt4 book ai didi

python - 多索引DF的排序

转载 作者:行者123 更新时间:2023-11-30 21:50:06 26 4
gpt4 key购买 nike

我有一个具有以下结构的多索引 DF:

>>> df = pd.DataFrame({(2014, 'value'): {('AR', 0): 1.2420, ('AR', 1): 0.1802,('BR', 0): 1.3,('BR', 1): 0.18}})
>>> print df

2014
value
AR 0 1.2420
1 0.1802
BR 0 1.3000
1 0.1800

我的目标是添加“排名”列,其中包含 0 和 1 的国家/地区(AR 和 BR)按降序排列的排名。期望的结果类似于:

            2014          
value rank
iso id
AR 0 1.2420 2
1 0.1802 1
BR 0 1.3 1
1 0.18 2

我最初的方法是重置索引:

>>> df = df.reset_index()
>>> print df

level_0 level_1 2014
value
0 AR 0 1.2420
1 AR 1 0.1802
2 BR 0 1.3000
3 BR 1 0.1800

然后使用 groupby 和排名添加“排名”列:

>>> df[2014, 'gr'] =  df.groupby(['level_1'])[2014, 'value'].rank(ascending=False)

然而,这会导致:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 2990, in __getitem__
if len(self.obj.columns.intersection(key)) != len(key):
File "/usr/local/lib/python2.7/dist-packages/pandas/core/index.py", line 3774, in intersection
result_names = self.names if self.names == other.names else None
AttributeError: 'tuple' object has no attribute 'names'

我是否走在正确的轨道上,我应该考虑另一种方法?

最佳答案

那么排名来自于值(value),对吗?我想这就是你想要的:

In [13]: df.groupby(level=1).rank(ascending=False)
Out[13]:
2014
value
AR 0 2
1 1
BR 0 1
1 2

您可以使用df['rank'] = df.groupby(level=1).rank(ascending=False)设置

关于python - 多索引DF的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983831/

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