Python将groupby()组标签设置为新数据帧中的索引

Python将groupby()组标签设置为新数据帧中的索引,python,pandas,Python,Pandas,我是一名python编程初学者,试图弄清楚如何将groupby操作中的组标签用作新数据帧的索引。 比如说, df = pd.DataFrame({'Country': ['USA', 'USA', 'UK', 'China', 'Canada', 'Australia', 'UK', 'China', 'USA'], 'Year': [1979, 1983, 1987, 1991, 1995, 1999, 2003, 2007, 2011], 'M

我是一名python编程初学者,试图弄清楚如何将groupby操作中的组标签用作新数据帧的索引。 比如说,

df = pd.DataFrame({'Country': ['USA', 'USA', 'UK', 'China', 'Canada', 'Australia', 'UK', 'China', 'USA'],
            'Year': [1979, 1983, 1987, 1991, 1995, 1999, 2003, 2007, 2011],
            'Medals': [52, 30, 25, 41, 19, 17, 9, 14, 12]})

df:
         Country  Medals  Year
    0        USA      52  1979
    1        USA      30  1983
    2         UK      25  1987
    3      China      41  1991
    4     Canada      19  1995
    5  Australia      17  1999
    6         UK       9  2003
    7      China      14  2007
    8        USA      12  2011

 c1 = df.groupby(df['Country'], as_index=True, sort=False, group_keys=True).size()

c1:
Country
USA          3
UK           2
China        2
Canada       1
Australia    1
我想创建一个新的数据帧,上面的c1结果正好是这种格式,但我还不能做到这一点。以下是我得到的:

d1 = pd.DataFrame(np.array(c1), columns=['Frequency'])
d1:
   Frequency
0          3
1          2
2          2
3          1
4          1
我希望组标签作为索引,而不是默认的0、1、2、3和4。 这正是我想要的:

Desired Output:
            Frequency
USA             3
UK              2
China           2
Canada          1
Australia       1

请问我怎样才能做到这一点?我想,若我创建一个带有国家的标签并将其指定为索引,它可能会起作用。但是,我正在练习的原始数据有太多行,因此我不可能创建标签列表。任何想法都将受到高度赞赏。

编辑:让我们看看您是否喜欢这一个

c1 = pd.DataFrame(c1.values, index=c1.index.values, columns=['Frequency'])
print(c1)

    Frequency
USA         3
UK          2
China       2
Canada      1
Australia   1
c1.values
大致等同于
np.array(c1)
但无需导入numpy

最初的回答(不太管用,留给后人):你可能在寻找答案

它应该是这样工作的:

c1 = df.groupby(df['Country'], as_index=True, sort=False, group_keys=True).size()

c2 = c1.set_index(['Country'])

让我知道这是否适合你

最后,我找到了一个可行的解决方案。我意识到c1是一个系列,而不是一个数据帧,其索引可由c1.index调用。因此,我通过指定索引改进了代码

d1 = pd.DataFrame(np.array(c1), index=c1.index, columns=['Frequency'])
d1:


我不知道这是否是最好的解决方案。更好的主意仍然受欢迎。

谢谢Josh。我运行了它,但出现了这个错误。(键入(self)。\uuuu name\uuuu,name))AttributeError:'Series'对象没有属性'set\u index'抱歉,我在创建c1时没有看到方法链的结尾。您应该能够从序列中生成一个数据帧,然后在需要时调用set_index。我不在电脑旁,但如果你还没弄明白,我可以稍后帮你。我还没弄明白。我会等你回到你的电脑。谢谢你的帮助,谢谢乔希。这些价值观起了作用。但是,set_index方法仍然给出了以前的错误消息。回溯(最近一次调用的最后一次):文件“C:/Users/test.py”,第463行,在c2=c1中。set_index(['Country'])文件“C:\Users\Anaconda3\lib\site packages\pandas\core\generic.py”,第2360行,在getattr(type(self)中。\uu name\uuuu,name))AttributeError:'Series'对象没有属性'set_index'嘿,看看我的编辑,或多或少你想到了什么,除了它摆脱了那个讨厌的“国家”。也没有numpy:)
           Frequency
Country             
USA                3
UK                 2
China              2
Canada             1
Australia          1