map()函数语法:
map(function,iterable…) -> function – 函数 iterable – 一个或多个序列
案例
s1 = [1,2,3,4,5]
s2 = [6,7,8,9,10]
s3 = map(lambda x,y:x*y,s1,s2)
list(s3)
>>>[6, 14, 24, 36, 50]
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
函数语法:
zip([iterable, …]) ->iterabl – 一个或多个迭代器;
->返回元组列表
案例
a = [1,2,3,4]
b = [5,6,7,8]
zipped = zip(a,b)
print(list(zipped))
zipped = zip(a,b)
print(list(zip(*zipped)))
>>>
[(1, 5), (2, 6), (3, 7), (4, 8)]
[(1, 2, 3, 4), (5, 6, 7, 8)]
在pandas.map apply applymap中的 map(),apply(),applymap() 函数
df = pd.DataFrame(np.random.randn(4,5),columns=list('abcde'),index=list('1234'))
df
>>>
a b c d e
1 0.495790 -0.689097 -0.184903 0.504760 -0.737977
2 0.553193 0.566546 0.931752 -0.332976 -0.072731
3 1.193077 -1.343220 0.147931 -0.813468 1.607825
4 -2.210206 -0.662889 0.432661 -1.294085 0.356094
1.单列运算
在pandas中,DataFrame的一列就是一个Series,可以通过map来对一列进行操作:
#map的具体过程是将数据集中的每一个元素进行函数处理
#map是以行或者列为单位,series的角度下进行操作,或加或减等等只影响一部分数据
print(df['a'])
df['f'] = df['a'].map(lambda x:x**2)
df['f']
>>>
1 0.495790
2 0.553193
3 1.193077
4 -2.210206
Name: a, dtype: float64
1 0.245808
2 0.306022
3 1.423434
4 4.885009
Name: f, dtype: float64
2.apply方法表示对DataFrame的多个列元素应用函数
#其中x代表当前行,可以通过下标进行索引。
f = lambda x:x.max()-x.min()
df2 = df.apply(f)
#也可以在行方向操作:
#df2 = df.apply(f,axis=1)
df2
>>>
a 3.403283
b 1.909766
c 1.116655
d 1.798846
e 2.345802
dtype: float64
–
待续:
3.分组运算
可以结合groupby与transform来方便地实现类似SQL中的聚合运算的操作
#groupby分组运算
a = df.groupby('a')['b'].transform(lambda x:(x.sum()-x)/x.count())
a
>>>
1 0.0
2 0.0
3 0.0
4 0.0
Name: b, dtype: float64
不同形式的分组运算
df1 = pd.DataFrame({'key1':['a','a','b','b','a'],
'key2':['one','two','one','two','one'],
'data1':np.random.randn(5),
'data2':np.random.randn(5)})
df1
>>>
key1 key2 data1 data2
0 a one -1.493935 1.481521
1 a two -0.082781 -1.806147
2 b one 1.645187 -0.702163
3 b two -0.244129 -0.624014
4 a one 0.599230 1.698049
(1)第一种方法
grouped1 = df1.groupby(['key1'])['data1'].transform('sum')
print(grouped1)
>>>
0 -0.977486
1 -0.977486
2 1.401058
3 1.401058
4 -0.977486
Name: data1, dtype: float64
(2)第二种方法
grouped2 = df1['data1'].groupby(df1['key1']).transform('sum')
print(grouped2)
>>>
0 -0.977486
1 -0.977486
2 1.401058
3 1.401058
4 -0.977486
Name: data1, dtype: float64
4.聚合函数
agg()