简体   繁体   中英

How can I get this series to a pandas dataframe?

I have some data and after using a groupby function I now have a series that looks like this:

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

How can I create a pandas dataframe from here with year as one column and the other column named sightings ?

I am a pandas novice so don't really know what I am doing. I have tried the reindex and unstack functions but haven't been able to get what I want...

You can use reset_index and rename columns:

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

Another solution is set column names by list of names:

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

EDIT:

Sometimes help add parameter as_index=False to groupby for returning 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()

在此输入图像描述

I've also used this method during the groupby stage to put the results straight into a dataframe:

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

If your original dataframe - df1 - had "Year" and "Sightings" as it's two columns then df3 should have each year listed under "Year" and the count (or sum, average, whatever) listed under "Sightings".

If not, you can change the column names by doing the following:

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

or

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM