我们可以用DataFrame的apply函数实现对多列,多行的操作。
需要记住的是,参数axis设为1是对列进行操作,参数axis设为0是对行操作。默认是对行操作。
apply 返回多列
1
2
3
4
5
6
7
8
|
# height = [70, 90, 100, 120, 140, 160, 180, 200,220,240, 260] # 长度为 11 # df.shape (1000, 11) # 对df的每一行的每一个元素操作,然后再返回多列 #----------返回多列----------------- df = df. apply ( lambda x: pd.Series([math.atan(i[ 0 ] / (i[ 1 ]) * 180 / math.pi for i in zip (height, x)]).astype( float ), axis = 1 ) .rename(columns = dict ( zip ( list ( range ( 0 , 11 )), df.columns))) #df['slope'] = df_10min.apply(lambda x: math.atan(210 / (x['ws_260'] - x['ws_50'] + 1e-7))*180/math.pi, axis=1) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import pandas as pd df_tmp = pd.DataFrame([ { "a" : "data1" , "cnt" : 100 },{ "a" : "data2" , "cnt" : 200 }, ]) df_tmp a cnt data1 100 data2 200 方法一:使用 apply 的参数result_type 来处理 def formatrow(row): a = row[ "a" ] + str (row[ "cnt" ]) b = str (row[ "cnt" ]) + row[ "a" ] return a, b df_tmp[[ "fomat1" , "format2" ]] = df_tmp. apply (formatrow, axis = 1 , result_type = "expand" ) df_tmp a cnt fomat1 format2 data1 100 data1100 100data1 data2 200 data2200 200data2 方法一:使用 zip 打包返回结果来处理 df_tmp[ "fomat1-1" ], df_tmp[ "format2-2" ] = zip ( * df_tmp. apply (formatrow, axis = 1 )) df_tmp a cnt fomat1 format2 fomat1 - 1 format2 - 2 data1 100 data1100 100data1 data1100 100data1 data2 200 data2200 200data2 data2200 200data2 |
生成新列
现在有如下一个DataFrame:
1
2
3
4
5
6
7
8
9
|
np.random.seed( 1 ) df = pd.DataFrame(np.random.randn( 4 , 2 ), columns = [ 'A' , 'B' ]) df >>> A B 0 1.624345 - 0.611756 1 - 0.528172 - 1.072969 2 0.865408 - 2.301539 3 1.744812 - 0.761207 |
对A, B两列操作,生成C列, 其中C是字符串,由A ± B组成。下面看一下结果就明白了。
1
|
df[ 'C' ] = df. apply ( lambda x: '{:.2f}±{:.2f}' . format (x[ 'A' ], x[ 'B' ]), axis = 1 ) |
看一下效果
A B C
0 1.624345 -0.611756 1.62±-0.61
1 -0.528172 -1.072969 -0.53±-1.07
2 0.865408 -2.301539 0.87±-2.30
3 1.744812 -0.761207 1.74±-0.76
多行操作举例
同理可以作用在多行上。
1
2
|
# 对第 10 行进行操作,基于第2、3两行 df.loc[ 10 ] = df. apply ( lambda x: '{:.2f}±{:.2f}' . format (x[ 2 ], x[ 3 ]) ) |
看一下实现的效果
A B
0 1.624345 -0.611756
1 -0.528172 -1.072969
2 0.865408 -2.301539
3 1.744812 -0.761207
10 0.87±1.74 -2.30±-0.76
参考链接
[1] pandas的DataFrame使用apply实现对多列,多行操作 2021.12
[2] pandas 的apply返回多列,并赋值 2020.4
到此这篇关于python中pandas操作apply返回多列的实现的文章就介绍到这了,更多相关pandas apply返回多列内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_46713695/article/details/125958501