AusMau
AusMau

Reputation: 15

Re name Columns Pandas

Hi I have create a new data frame based on groupby, mean and count as per below:

suburb_price = HH.groupby(['Suburb']).agg({'Price':['mean'],
                                       'Suburb':['count']})


        |Suburb             |Price      |Suburb
                            |mean       |count

|0      |Austins Ferry      |585,000    |  1
|1      |Battery Point      |700,000    |  1
|2      |Bellerive          |498,571    |  7
|3      |Berriedale         |465,800    |  5
|4      |Blackmans Bay      |625,000    |  1

and I want to change the name of the columns by using

suburb_price.reset_index(level=0,inplace=True)
suburb_price.rename(index={0:'Suburb Name',1:'Average Price',2:'Number of Properties'})

but it does not seem to work, not sure why

Upvotes: 1

Views: 34

Answers (1)

jezrael
jezrael

Reputation: 863701

Your solution should working if rename columns by range with length of columns and pass to rename parameter columns:

 suburb_price.reset_index(inplace=True)
 suburb_price.columns = range(len(suburb_price.columns))
 suburb_price = suburb_price.rename(columns={0:'Suburb Name',1:'Average Price',2:'Number of Properties'})

Simplier is set columns names by list:

suburb_price.reset_index(inplace=True)
suburb_price.columns = ['Suburb Name','Average Price','Number of Properties']

Another idea is use GroupBy.agg with named aggregations and rename column Suburb:

test1 = [[0,7,50], [0,3,51], [0,3,45], [1,5,50],[1,0,50],[2,6,50]]
HH = pd.DataFrame({'Suburb':list('aaabbc'), 'Price':[5,10,20,2,45,3]})
print (HH)
  Suburb  Price
0      a      5
1      a     10
2      a     20
3      b      2
4      b     45
5      c      3

suburb_price = (HH.groupby(['Suburb'])
                  .agg(**{'Average Price': ('Price', 'mean'),
                         'Number of Properties': ('Suburb', 'count')})
                  .reset_index()
                  .rename(columns={'Suburb':'Suburb Name'}))
print (suburb_price)
  Suburb Name  Average Price  Number of Properties
0           a      11.666667                     3
1           b      23.500000                     2
2           c       3.000000                     1

Upvotes: 1

Related Questions