python中 zip()的使用和pandas中的列运算(map apply等)

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()

发布了24 篇原创文章 · 获赞 3 · 访问量 1581

猜你喜欢

转载自blog.csdn.net/xfxlesson/article/details/100607602