python中pandas操作apply返回多列的实现

目录
  • apply 返回多列
  • 生成新列
  • 多行操作举例

我们可以用DataFrame的apply函数实现对多列,多行的操作。

需要记住的是,参数axis设为1是对列进行操作,参数axis设为0是对行操作。默认是对行操作。

apply 返回多列

# 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)
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:

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组成。下面看一下结果就明白了。

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

多行操作举例

同理可以作用在多行上。

# 对第 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返回多列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas使用apply多列生成一列数据的实例

    如下所示: import pandas as pd def my_min(a, b): return min(abs(a),abs(b)) s = pd.Series([10.0247,10.0470, 10.0647,10.0761,15.0800,10.0761,10.0647,10.0470,10.0247,10.0,9.9753,9.9530,9.9353,9.9239,18.92,9.9239,9.9353,9.9530,9.9753,10.0]) df = pd.DataFrame(

  • pandas apply使用多列计算生成新的列实现示例

    在python数据分析中,有时需要根据多列数据生成中间结果,pandas给我们带来了很多方便,通常简短的代码可以实现一些高级功能,灵活掌握一些技巧可以事倍功半 pandas的apply方法用于对指定列的每个元素进行相同的操作,下面生成一个dataFrame用于演示: import pandas as pd a=range(5) b=range(5,10) c=range(10,15) data=pd.DataFrame([a,b,c]).T data.columns=["a",&quo

  • Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)

    1.单列运算 在Pandas中,DataFrame的一列就是一个Series, 可以通过map来对一列进行操作: df['col2'] = df['col1'].map(lambda x: x**2) 其中lambda函数中的x代表当前元素.可以使用另外的函数来代替lambda函数,例如: define square(x): return (x ** 2) df['col2'] = df['col1'].map(square) 2.多列运算 apply()会将待处理的对象拆分成多个片段,然后对各

  • python中pandas操作apply返回多列的实现

    目录 apply 返回多列 生成新列 多行操作举例 我们可以用DataFrame的apply函数实现对多列,多行的操作. 需要记住的是,参数axis设为1是对列进行操作,参数axis设为0是对行操作.默认是对行操作. apply 返回多列 # height = [70, 90, 100, 120, 140, 160, 180, 200,220,240, 260] # 长度为 11 # df.shape   (1000, 11) # 对df的每一行的每一个元素操作,然后再返回多列 #-------

  • python中pandas.DataFrame对行与列求和及添加新行与列示例

    本文介绍的是python中pandas.DataFrame对行与列求和及添加新行与列的相关资料,下面话不多说,来看看详细的介绍吧. 方法如下: 导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFrame(np.random.randn(4, 5), columns=['A', 'B', 'C', 'D', 'E']) DataFrame数据预览: A

  • python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)

    前言 最近在网上搜了许多关于pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作DataFrame,花了我挺长时间去调整BUG的.我在这里做一些总结,方便你我他.感兴趣的朋友们一起来看看吧. 一.创建DataFrame的简单操作: 1.根据字典创造: In [1]: import pandas as pd In [3]: aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]} In [4]: bb=

  • python中pandas库中DataFrame对行和列的操作使用方法示例

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是S

  • ​python中pandas读取csv文件​时如何省去csv.reader()操作指定列步骤

    优点: 方便,有专门支持读取csv文件的pd.read_csv()函数. 将csv转换成二维列表形式 支持通过列名查找特定列. 相比csv库,事半功倍 1.读取csv文件 import pandas as pd   file="c:\data\test.csv" csvPD=pd.read_csv(file)   df = pd.read_csv('data.csv', encoding='gbk') #指定编码     read_csv()方法参数介绍 filepath_or_buf

  • Python中pandas dataframe删除一行或一列:drop函数详解

    用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=0,指删除index,因此删除columns时要指定axis=1: inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe: inplace=True,则会直接在原数据上进行删除操作,删除后就回不来了. 例子: >>>df = pd.DataFrame(np.a

  • python中pandas对多列进行分组统计的实现

    使用groupby([ ]).size()统计的结果,值相同的字段值会不显示 如上图所示,第一个空着的行是982499 7 3388 1,因为此行与前面一行的这两个字段值是一样的,所以不显示.第二个空着的行是390192 22 4278 1,因为此行与前面一行的第一个字段值是一样的,所以不显示.这样的展示方式更直观,但对于刚用的人,可能会让其以为是缺失值. 如果还不明白可以看下面的全部数据及操作. import pandas as pd res6 = pd.read_csv('test.csv'

  • 一文搞懂Python中Pandas数据合并

    目录 1.concat() 主要参数 示例 2.merge() 参数 示例 3.append() 参数 示例 4.join() 示例 数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧! 1.concat() concat() 可用于两个及多个 DataFrame 间行/列方向进行内联或外联拼接操作,默认对行(沿 y 轴)取并集. 使用方式 pd.concat( objs: Union[Iterable[~FrameOr

  • python中pandas常用命令详解

    pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.pandas提供了大量能使我们快速便捷地处理数据的函数和方法.你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一. 1.pandas pandas 是一个多功能且功能强大的数据科学库. 2.读取数据 pd.read_csv("data.csv") 3.读取指定列 pd.read_csv(&quo

  • Python中序列的修改、散列与切片详解

    前言 本文主要给大家介绍了关于Python中序列的修改.散列与切片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Vector类:用户定义的序列类型 我们将使用组合模式实现 Vector 类,而不使用继承.向量的分量存储在浮点数数组中,而且还将实现不可变扁平序列所需的方法. Vector 类的第 1 版要尽量与前一章定义的 Vector2d 类兼容. Vector类第1版:与Vector2d类兼容 Vector 类的第 1 版要尽量与前一章定义的 Vector2d

随机推荐