groupby的数据处理简单用法
groupby(by=None, axis=0, level=None,
as_index=True, sort=True,
group_keys=True, squeeze=False, **kwargs)
1、by:mapping, function, str, or iterable。
用于确定groupby的组。如果by是一个函数,那么会调用对象索引的每个值。
如果传递了一个dict或Series,则将使用Series或dict的值来确定组。
一个str或者一个strs列表可以通过自己的列传递给group。
2、axis:轴,int值,默认为0
3、level:如果axis是一个MultiIndex(分层),则按特定的级别分组。int值,默认为None
4、as_index:对于聚合输出,返回带有组标签的对象作为索引。as_index=False实际上是“SQL风格”分组输出,boolean值,默认为True。
5、sort:排序。关闭此功能以获得更好的性能。boolean值,默认True。
6、group_keys:当调用apply时,添加group key来索引来识别片断。boolean值,默认True。
7、squeeze:尽可能减少返回类型的维度,否则返回一致的类型。boolean值,默认False。
1.按照指定列进行分类
g = data_train.groupby(['SibSp','Survived']) ##将sibsp与survived列作为分类依据
df = pd.DataFrame(g.count()['PassengerId']) ##分类依据后,PassengerId作为特征属性量
print(df)
也可以用这个,.fare指的是经过前面两个分组之后,fare作为特征属性展示
#票价与pclass和Embarked有关,所以用train分组后的平均数填充
train.groupby(by=["Pclass","Embarked"]).Fare.mean()
2.抽取指定列来进行统计分类
##进一步观察数据与结果的关系,利用相关性分析
pclass_relate=train.groupby(['Pclass'])['Pclass','Survived'].mean() ##分类准则是pclass
# print(group_relate)
train[['Pclass','Survived']].groupby(['Pclass']).mean().plot(kind='bar') ##等效于data.plot.bar(),柱状图
3.还遇到过利用分组进行排序
train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)
4.利用groupby来新增或者改变列
u3['u_buy_with_coupon']=1
u3=u3.groupby(['User_id'],as_index=False).count()
utmp = fdf[(fdf['Date'].notnull()) & (fdf['Date_received'].notnull())][['User_id', 'distance']]
utmp.replace(-1, np.nan, inplace = True)
u5 = utmp.groupby(['User_id'], as_index=False).min()
u5.rename(columns={'distance': 'u_min_distance'}, inplace=True)