数据挖掘和机器学习中会经常用到groupby()函数,merge()函数,concat()函数。groupby()函数主要对数据进行聚合,merge()一般情况下用来对两个Dataframe进行结合(一般情况下按照某一列进行将两个Dataframe进行连接),concat()一般情况下是直接在纵轴上面直接合并。下面来总结下这几个函数之间的用法和不同之处。
1.groupby()
1.groupby的一般用法
关于groupby()意为聚合函数,用到最多的就是将同一列中的不同的行的值进行聚合,至于怎么聚合则看后面用什么函数,如函数是mean(),那么表示对这一列进行聚合后其他列的值都进行了求均值,还可以对多个列进行聚合,注意聚合后这些列则成为索引,具体如下:
首先构造一个Dataframe(这里用字典的方法来进行构建Dataframe)
>>>import pandas as pd
>>>df=pd.DataFrame({'s1':['a','a','a','d','e'],
>>> 's2':['one','two','one','four','five'],
>>> 's3': np.random.randn(5),
>>> 's4': np.random.randn(5)})
>>>df
s1 s2 s3 s4
0 a one 0.998368 1.406745
1 a two -0.175247 0.495464
2 a one -0.532833 -0.300619
3 d four -0.019009 0.560179
4 e five 0.815014 -0.251015
1.对df中的s1列进行聚合
>>>a=df.groupby(['s1']).mean()
>>>a
s3 s4
s1
a 0.132566 0.519919
d -0.413402 1.205482
e -1.258209 0.434470
2.对df中的s2列进行聚合
>>>b=df.groupby(['s2']).mean()
>>>b
s3 s4
s2
five -1.258209 0.434470
four -0.413402 1.205482
one -0.454132 1.044133
two 1.305962 -0.528508
在对上面的s1或s2进行聚合后另一列是没有的,因为假如对s1进行聚合那么s2就是麻烦列直接进行在结果中进行删去即取其子集
3.对df中s1和s2列进行聚合,并且选择聚合后的s3列
>>>c=df.groupby(['s1','s2']).mean()['s3']
>>>c
s1 s2
a one -0.454132
two 1.305962
d four -0.413402
e five -1.258209
Name: s3, dtype: float64
4.还可以对其中的series进行聚合,如下
>>>d=df['s3'].groupby(df['s1']).mean()
>>>d
s1
a 0.132566
d -0.413402
e -1.258209
Name: s3, dtype: float64
这里是对s3列进行按照s1列进行聚合,注意这里不能对s2列进行聚合,因为对s1进行聚合则s2列是麻烦列
假如在数据集中某一个列中有很多值是相同的,那么很有可能需要进行聚合处理,一般情况下是是userid这一列有多个值是相同的,那么狠可能对其进行聚合处理,然后对其他列中的值进行计算。
在上面的例子中还可以使用其他的函数,一般使用比较多的函数:
mean() 求均值 |
sum() 求和 |
size() 求某一列中某一个值聚合之前的行数(注意输出的seris即只是一列) |
count() 和上面的series功能类似,但是这里输出的的Dataframe |
describe() 对每个聚合的列求出其count() ,mean(),std(),min(),max(),25%,50%,75%的值 |
std() 标准差 |
frist(),last() 第一个,最后一个非NA值 |
还可以使用groupby来进行迭代,对于多重键的情况,元组的第一个元素将会是由键值组成的元组,如下:
>>>import pandas as pd
>>>df=pd.DataFrame({'s1':['a','a','a','d','e'],
>>> 's2'