Pandas Python:group by之后的索引不正确,对列集合的聚合不同
我想按Pandas Python:group by之后的索引不正确,对列集合的聚合不同,pandas,indexing,filter,group-by,aggregate,Pandas,Indexing,Filter,Group By,Aggregate,我想按CurrentDate、Car字段分组,并应用以下功能: np.mean函数到['Attr1',…'Attr5']列的列表 np.随机用于工厂列 这里介绍了df的示例: Index Car Attr1 Attr2 Attr3 Attr4 Attr5 AttrFactory CurrentDate 0 Nissan 0.0 1.7 3.7 0.0 6.8
CurrentDate、Car
字段分组,并应用以下功能:
np.mean
函数到['Attr1',…'Attr5']
列的列表np.随机
用于工厂
列df
的示例:
Index Car Attr1 Attr2 Attr3 Attr4 Attr5 AttrFactory CurrentDate
0 Nissan 0.0 1.7 3.7 0.0 6.8 F1 01/07/18
1 Nissan 0.0 1.7 3.7 0.0 6.8 F2 01/07/18
2 Nissan 0.0 1.7 3.7 0.0 6.8 F3 03/08/18
3 Porsche 10.0 0.0 2.8 3.5 6.5 F2 05/08/18
4 Porsche 10.0 2.0 0.8 3.5 6.5 F1 05/08/18
5 Golf 0.0 1.7 3.0 2.0 6.3 F4 07/09/18
6 Tiguan 1.0 0.0 3.0 5.2 5.8 F5 10/09/18
7 Porsche 0.0 0.0 3.0 4.2 7.8 F4 12/09/18
8 Tiguan 0.0 0.0 0.0 7.2 9.0 F3 13/09/18
9 Golf 0.0 3.0 0.0 0.0 4.8 F5 25/09/18
10 Golf 0.0 3.0 0.0 0.0 4.8 F1 25/09/18
11 Golf 0.0 3.0 0.0 0.0 4.8 F3 25/09/18
我尝试通过以下代码执行此操作:
metric_cols = df.filter(regex='^Attr',axis=1).columns #it's list of all Attr columns;
addt_col = list(df.filter(regex='^Attr',axis=1).columns).remove('AttrFactory')
df_gr = df.groupby(['CurrentDate', 'Car'], as_index=False)[metric_cols].agg({addt_col: np.mean, 'AttrFactory': lambda x: x.iloc[np.random.choice(range(0,len(x)))]})
在结果中,我收到了带有inctorrect索引的df
:
CurrentDate Car NaN
CurrentDate Car Attr1 Attr2 Attr3 Attr4 Attr5 AttrFactory
01/07/18 Nissan 01/07/18 Nissan 0.0 1.7 3.7 0.0 6.8 F1
03/08/18 Nissan 03/08/18 Nissan 0.0 1.7 3.7 0.0 6.8 F3
05/08/18 Porsche 05/08/18 Porsche 10.0 1.0 1.8 3.5 6.5 F1
... ... ... ... ... ... ... ... ... ...
13/09/18 Tiguan 13/09/18 Tiguan 0.0 0.0 0.0 7.2 9.0 F3
25/09/18 Golf 25/09/18 Golf 0.0 1.0 0.0 0.0 4.8 F3
预期输出为df\U gr:
Attr1 Attr2 Attr3 Attr4 Attr5 AttrFactory
01/07/18 Nissan 0.0 1.7 3.7 0.0 6.8 F1
03/08/18 Nissan 0.0 1.7 3.7 0.0 6.8 F3
05/08/18 Porsche 10.0 1.0 1.8 3.5 6.5 F1
... ... ... ... ... ... ... ...
13/09/18 Tiguan 0.0 0.0 0.0 7.2 9.0 F3
25/09/18 Golf 0.0 1.0 0.0 0.0 4.8 F3
如何修复结果顶部不正确的索引?
如果您有任何想法,我将不胜感激,谢谢)您可以为您的聚合创建一个字典,并将它们传递到agg 在: 输出:
您可以制作聚合的字典并将它们传递到agg 在: 输出:
聚合器按列应用,因此存储在级别2,而列名存储在级别1(以防止覆盖)。这在每列应用多个聚合器时特别有用 解决方案如下:
# Merge the aggregator with the column name
df_gr.columns = ['_'.join(x) for x in df_gr.columns.values.reshape(-1)]
聚合器按列应用,因此存储在级别2,而列名存储在级别1(以防止覆盖)。这在每列应用多个聚合器时特别有用 解决方案如下:
# Merge the aggregator with the column name
df_gr.columns = ['_'.join(x) for x in df_gr.columns.values.reshape(-1)]
# Merge the aggregator with the column name
df_gr.columns = ['_'.join(x) for x in df_gr.columns.values.reshape(-1)]