如何将这个系列添加到 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 新手,所以真的不知道自己在做什么。我已经尝试了 reindex
和 unstack
功能,但无法得到我想要的...
您可以使用 reset_index
和 rename
列:
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'})
我有一些数据,在使用 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 新手,所以真的不知道自己在做什么。我已经尝试了 reindex
和 unstack
功能,但无法得到我想要的...
您可以使用 reset_index
和 rename
列:
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'})