如何将这个系列转换为pandas数据框?

3

我有一些数据,在使用groupby函数后,现在有一个系列看起来像这样:

year
1997    15
1998    22
1999    24
2000    24
2001    28
2002    11
2003    15
2004    19
2005    10
2006    10
2007    21
2008    26
2009    23
2010    16
2011    33
2012    19
2013    26
2014    25

如何从这里创建一个 pandas 数据帧,其中 year 是一列,另一列名为 sightings ?

作为一个 pandas 初学者,我不太知道该怎么做。我尝试过 reindexunstack 函数,但都没有得到我想要的结果...

3个回答

2
您可以使用reset_indexrename列来实现:

print (df.reset_index())
    index  year
0    1997    15
1    1998    22
2    1999    24
3    2000    24
4    2001    28
5    2002    11
6    2003    15
7    2004    19
8    2005    10
9    2006    10
10   2007    21
11   2008    26
12   2009    23
13   2010    16
14   2011    33
15   2012    19
16   2013    26
17   2014    25

print (df.reset_index().rename(columns=({'index':'year','year':'sightings'})))
    year  sightings
0   1997         15
1   1998         22
2   1999         24
3   2000         24
4   2001         28
5   2002         11
6   2003         15
7   2004         19
8   2005         10
9   2006         10
10  2007         21
11  2008         26
12  2009         23
13  2010         16
14  2011         33
15  2012         19
16  2013         26
17  2014         25

另一种解决方案是通过列名列表来设置列名:

df1 = df.reset_index()
df1.columns = ['year','sightings']
print (df1)
    year  sightings
0   1997         15
1   1998         22
2   1999         24
3   2000         24
4   2001         28
5   2002         11
6   2003         15
7   2004         19
8   2005         10
9   2006         10
10  2007         21
11  2008         26
12  2009         23
13  2010         16
14  2011         33
15  2012         19
16  2013         26
17  2014         25

编辑:

有时需要在 groupby 中添加参数 as_index=False,以返回 DataFrame

import pandas as pd

df = pd.DataFrame({'A':[1,1,3],
                   'B':[4,5,6]})

print (df)
   A  B
0  1  4
1  1  5
2  3  6

print (df.groupby('A')['B'].sum())
A
1    9
3    6
Name: B, dtype: int64

print (df.groupby('A', as_index=False)['B'].sum())
   A  B
0  1  9
1  3  6

第二个解决方案正是我所需要的,谢谢。(当我可以时,我会接受它) - Vinyl Warmth
1
谢谢。也许有一个问题 - 你使用什么样的groupby?因为有时候在groupby中添加参数as_index=False,它会返回漂亮的DataFrame。它适用于groupby和聚合sum、mean等操作。 - jezrael

2
s.rename('sightings').reset_index()

enter image description here


0

我在groupby阶段也使用了这种方法,将结果直接放入数据框中:

df2 = df1.groupby(['Year']).count()
df3 = pd.DataFrame(df2).reset_index()

如果您的原始数据框 - df1 - 其中有“Year”和“Sightings”作为两列,则df3应在“Year”下列出每个年份,并在“Sightings”下列出计数(或总和,平均值等)。

如果不是这样,则可以通过以下方式更改列名:

df3.columns = ['Year','Sightings']

或者

df3 = df3.rename(columns={'oldname_A': 'Year', 'oldname_B': 'Sightings'})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接