GroupBy之后无法重命名列

时间:2019-02-26 11:49:57

标签: python pandas

我正在执行以下操作:

# Load date
data = pd.read_csv('C:/Users/user/Desktop/STOCKS.txt', keep_default_na=True, sep='\t', nrows=5)

# Convert dates from object columns to datetime columns
data['DATE'] = pd.to_datetime(data_orders['DATE'])

print(data.columns)
# Index(['COUNTRY_ID', 'STOCK_ID', 'DATE', 'STOCK_VALUE'], dtype='object')

# Count of stock per country per day
data_agg= data.groupby(['COUNTRY_ID'], as_index=False).agg({'DATE': 'count'})

print(data_agg.columns)
# Index(['COUNTRY_ID', 'DATE'], dtype='object')

# Rename count column
data_agg.rename({'DATE': 'Count'}, inplace=True)

print(data_agg.columns)
# Index(['COUNTRY_ID', 'DATE'], dtype='object')

如您在上面的最后几行中所见,我尝试在groupby之后重命名聚合列,但是由于某些原因,它不起作用(我仍然为该列取名称DATE而不是{{1} }。

我该如何解决?

2 个答案:

答案 0 :(得分:4)

需要columns关键字,如果忽略它,rename尝试更改索引值:

data_agg.rename(columns={'DATE': 'Count'}, inplace=True)

rng = pd.date_range('2017-04-03', periods=10)
data = pd.DataFrame({'DATE': rng, 'COUNTRY_ID': [3]*3+ [4]*5 + [1]*2})  
print (data)
        DATE  COUNTRY_ID
0 2017-04-03           3
1 2017-04-04           3
2 2017-04-05           3
3 2017-04-06           4
4 2017-04-07           4
5 2017-04-08           4
6 2017-04-09           4
7 2017-04-10           4
8 2017-04-11           1
9 2017-04-12           1

data_agg= data.groupby(['COUNTRY_ID'], as_index=False).agg({'DATE': 'count'})

data_agg.rename({'DATE': 'Count', 1:'aaa'}, inplace=True)
print (data_agg)
     COUNTRY_ID  DATE
0             1     2
aaa           3     3
2             4     5

data_agg.rename(columns={'DATE': 'Count', 1:'aaa'}, inplace=True)
print (data_agg)
   COUNTRY_ID  Count
0           1      2
1           3      3
2           4      5

另一种解决方案是删除as_index=False并将DataFrameGroupBy.countSeries.reset_index一起使用:

data_agg= data.groupby('COUNTRY_ID')['DATE'].count().reset_index(name='Count')

print (data_agg)
   COUNTRY_ID  Count
0           1      2
1           3      3
2           4      5

答案 1 :(得分:1)

我认为这可以解决您的问题

data_agg=data_agg.rename(columns={'Date':'Count'})