Python将groupby()组标签设置为新数据帧中的索引
我是一名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
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