在Pandas中,DataFrame的一列就是一個(gè)Series, 可以通過map來對(duì)一列進(jìn)行操作:
df['col2'] = df['col1'].map(lambda x: x**2)
其中l(wèi)ambda函數(shù)中的x代表當(dāng)前元素??梢允褂昧硗獾暮瘮?shù)來代替lambda函數(shù),例如:
- define square(x):
- return (x ** 2)
- df['col2'] = df['col1'].map(square)
要對(duì)DataFrame的多個(gè)列同時(shí)進(jìn)行運(yùn)算,可以使用apply,例如col3 = col1 + 2 * col2:
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
其中x帶表當(dāng)前行,可以通過下標(biāo)進(jìn)行索引。
可以結(jié)合groupby與transform來方便地實(shí)現(xiàn)類似SQL中的聚合運(yùn)算的操作:
df['col3'] = df.groupby('col1')['col2'].transform(lambda x: (x.sum() - x) / x.count())
在transform函數(shù)中x.sum()與x.count()與SQL類似,計(jì)算的是當(dāng)前group中的和與數(shù)量,還可以將transform的結(jié)果作為一個(gè)一個(gè)映射來使用, 例如:
- sumcount = df.groupby('col1')['col2'].transform(lambda x: x.sum() + x.count())
- df['col1'].map(sumcount)
對(duì)col1進(jìn)行一個(gè)map,得到對(duì)應(yīng)的col2的運(yùn)算值。
結(jié)合groupby與agg實(shí)現(xiàn)SQL中的分組聚合運(yùn)算操作,需要使用相應(yīng)的聚合函數(shù):
df['col2'] = df.groupby('col1').agg({'col1':{'col1_mean': mean, 'col1_sum‘’: sum}, 'col2': {'col2_count': count}})
上述代碼生成了col1_mean, col1_sum與col2_count列。聯(lián)系客服