如何将这个系列添加到 pandas 数据框?

How can I get this series to a pandas dataframe?

我有一些数据,在使用 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 功能,但无法得到我想要的...

您可以使用 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

编辑:

有时帮助将参数 as_index=False 添加到 groupby 以返回 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
s.rename('sightings').reset_index()

我在 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'})