【pandas】(七)df.apply(lambda表达式)

一、pandas.apply()

1.1遍历DataFrame的元素(一行数据或者一列数据)

dataframe.apply(function,axis)对一行或一列做出一些操作(axis=1遍历行,axis=0遍历列)

1.1.1 行遍历

在这里插入图片描述

1.1.2 列遍历

默认列遍历
在这里插入图片描述

1.2遍历Series的元素(单个数据)

在这里插入图片描述

二 lambda表达式

函数式编程,使得apply()处理数据时,参数可以传函数。

2.1 python内置函数

默认列遍历
在这里插入图片描述

2.2 自定义处理流程

2.2.1 if else

一般情况下:

if 条件1:
    语句1
elif 条件2:
    语句2
else:
    语句3

但如果要使用lambda一行表示if多条件,则:

lambda x: 语句1 if 条件1 else ( 语句2 if 条件2 else 语句3 )

在这里插入图片描述

2.2.2 自定义函数

在这里插入图片描述

  • 62
    点赞
  • 256
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
代码的问题在于,数据框 df1 和 df2 中的 m1 和 m2 字段在创建时的顺序不同,导致在合并时可能会出现错误。正确的代码如下: ```python import pandas as pd import numpy as np # 创建两个Dataframe df1 = pd.DataFrame({'m1': [1, 2, 3], 'm2': ['a', 'b', 'c'], 'x1': [10, 20, 30], 'x2': [100, 200, 300]}) df2 = pd.DataFrame({'m1': [3, 2, 1], 'm2': ['c', 'b', 'a'], 'x1': [35, 25, 15], 'x2': [350, 250, 150]}) # 按照相同维度字段m1、m2将两个Dataframe进行合并 merged_df = pd.merge(df1, df2, on=['m1', 'm2']) # 计算两个Dataframe的差值 merged_df['x1_diff'] = merged_df['x1_y'] - merged_df['x1_x'] merged_df['x2_diff'] = merged_df['x2_y'] - merged_df['x2_x'] # 计算x1和x2字段的值 merged_df['x1_value'] = merged_df[['x1_x', 'x1_y']].apply(lambda x: x['x1_diff'] / x['x1_x'], axis=1) merged_df['x2_value'] = merged_df[['x2_x', 'x2_y']].apply(lambda x: x['x2_diff'] / x['x2_x'], axis=1) # 筛选出x1和x2字段计算出来的大于0的所有值 positive_x1 = merged_df.loc[merged_df['x1_value'] > 0, 'x1_value'].values positive_x2 = merged_df.loc[merged_df['x2_value'] > 0, 'x2_value'].values # 计算中位数和第二四分位数 x1_median = np.median(positive_x1) x1_q2 = np.percentile(positive_x1, 75) x1_q4 = np.percentile(positive_x1, 25) x2_median = np.median(positive_x2) x2_q2 = np.percentile(positive_x2, 75) x2_q4 = np.percentile(positive_x2, 25) print('x1 中位数:', x1_median) print('x1 第二四分位数:', x1_q2, x1_q4) print('x2 中位数:', x2_median) print('x2 第二四分位数:', x2_q2, x2_q4) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值