Skip to main content
 首页 » 编程设计

python之无法在 GroupBy 之后重命名列

2025年05月04日18insus

我正在做以下事情:

# 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 而不是 Count).

我该如何解决这个问题?

请您参考如下方法:

需要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.count与 Series.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