无法创建带有计数的新列并保留GroupBy列

时间:2019-01-30 17:22:00

标签: python pandas

我正在执行以下操作:

data_weeks = pd.read_csv('Desktop/Weeks_ids.csv', keep_default_na=True)
data_surveys = pd.read_csv('Desktop/surveys_data.csv', keep_default_na=True)

data_surveys_with_weeks = data_weeks.merge(data_surveys , on=['Date'], how='inner')

data_surveys_with_weeks = data_surveys_with_weeks.groupby(['Store_id', 'Week_id'], as_index=False).transform('count')

data_surveys_with_weeks .to_csv('Desktop/Performance Engine/surveys_count.csv', index=False)

但是,除了获得countStore_id的带有Week_id的新列之外,我实际上没有得到此列,而且我也缺少了Store_id和{ {1}}列。

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

只需将返回的序列分配给新列:

# sample data
df = pd.DataFrame({'Date':pd.date_range('2019-01-01', '2019-01-10'),
                   'Week':pd.date_range('2019-01-01', '2019-01-10').week,
                   'store_id': [1,1,1,2,2]*2})

df['group_count'] = df.groupby(['store_id', 'Week']).transform('count')

        Date  Week  store_id  group_count
0 2019-01-01     1         1            4
1 2019-01-02     1         1            4
2 2019-01-03     1         1            4
3 2019-01-04     1         2            2
4 2019-01-05     1         2            2
5 2019-01-06     1         1            4
6 2019-01-07     2         1            2
7 2019-01-08     2         1            2
8 2019-01-09     2         2            2
9 2019-01-10     2         2            2

或者如果您不想返回所有内容,请使用agg

df.groupby(['store_id', 'Week']).agg('count')

               Date
store_id Week      
1        1        4
         2        2
2        1        2
         2        2

更新

由于增加了列而出现错误...它将返回一个框架而不是一个序列,因此只需指定要计数的列即可。查看新示例:

df = pd.DataFrame({'Date':pd.date_range('2019-01-01', '2019-01-10'),
                   'Week':pd.date_range('2019-01-01', '2019-01-10').week,
                   'store_id': [1,1,1,2,2]*2,
                  'another_col':np.random.randn(10)})

df['group_count'] = df.groupby(['store_id', 'Week'])['Date'].transform('count')

或使用agg的另一个示例:

df.groupby(['store_id', 'Week']).agg({'Date':'count'})