当前位置: 首页 > news >正文

【Python】pandas的向量化操作

dict_nb={[1,2,3]:[4,5]}#多层循环效率不高
for i in range(0, df2.shape[0]): #循环,如果df2的列表中,每行第1列等于GOOD,且第4列等于字典键的第二个值(此处为2),第5列等于字典键的第三个值(此处为3)if df2.values[i][1] == "GOOD" and df2.values[i][4] == list(dict_nb.keys())[0][1] and df2.values[i][5] ==list(dict_nb.keys())[0][2]:print(dict_nb[("GOOD", df2.values[i][4], df2.values[i][5])]) #打印该字典的值## 使用pandas的向量化操作更高效
first_key = list(dict_nb.keys())[0] #字典的键列表化
filtered_df = df2[(df2.iloc[:, 1] == "GOOD") &  (df2.iloc[:, 4] == first_key[1]) & (df2.iloc[:, 5] == first_key[2])]for index, row in filtered_df.iterrows():key = ("GOOD", row[4], row[5])print(dict_nb[key])

################# 加入循环 #######################
# 使用pandas提高效率
for key, dict_value in dict_nb.items():code, val1, val2 = key# 使用pandas的布尔索引mask = ((df2.iloc[:, 1] == code) &   #选择df2的第2,5,6列的所有行,创建一个布尔序列,表示第2,5,6列的值是否等于 code,val1,val2,如果mask为True表示满足所有条件(df2.iloc[:, 4] == val1) & (df2.iloc[:, 5] == val2))matching_rows = df2[mask]   #使用布尔索引,只返回 mask 为 True 的行if not matching_rows.empty:  #检查筛选结果是否为空,如果不为空,则打印字典值
        print(f"字典值: {dict_value}")

向量化操作是指使用 Pandas/NumPy 的内置函数对整个数据集进行操作,而不是使用 Python 循环。这些操作在底层使用编译语言(如 C 或 Fortran)实现,比 Python 循环快几个数量级。

常见的向量化操作

1. 算术运算
python
# 基本算术运算
df['add'] = df['A'] + df['B']        # 加法
df['subtract'] = df['A'] - df['B']   # 减法
df['multiply'] = df['A'] * df['B']   # 乘法
df['divide'] = df['A'] / df['B']     # 除法
df['power'] = df['A'] ** 2           # 幂运算# 使用 numpy 函数
df['sqrt'] = np.sqrt(df['A'])        # 平方根
df['log'] = np.log(df['A'])          # 对数
2. 比较运算
python
# 比较操作
df['greater'] = df['A'] > df['B']           # 大于
df['equal'] = df['A'] == df['B']            # 等于
df['between'] = (df['A'] >= 10) & (df['A'] <= 50)  # 介于# 多条件组合
condition = (df['A'] > 50) | (df['B'] < 20)  # 或条件
df['complex_condition'] = condition
3. 字符串操作
python
# 创建字符串数据
df_str = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],'email': ['alice@email.com', 'bob@test.com', 'charlie@mail.org', 'david@example.com']
})# 字符串向量化操作
df_str['name_upper'] = df_str['name'].str.upper()           # 大写
df_str['name_length'] = df_str['name'].str.len()            # 长度
df_str['domain'] = df_str['email'].str.split('@').str[1]    # 提取域名
df_str['contains_test'] = df_str['email'].str.contains('test')  # 包含检测
4. 日期时间操作
python
# 创建日期数据
df_date = pd.DataFrame({'date': pd.date_range('2023-01-01', periods=5),'value': [10, 20, 30, 40, 50]
})# 日期向量化操作
df_date['year'] = df_date['date'].dt.year           # 提取年份
df_date['month'] = df_date['date'].dt.month         # 提取月份
df_date['day_name'] = df_date['date'].dt.day_name() # 星期几
df_date['next_week'] = df_date['date'] + pd.Timedelta(days=7)  # 日期加减
5. 条件逻辑操作
python
# 使用 np.where
df['category'] = np.where(df['A'] > 50, 'High', 'Low')# 使用 np.select 处理多个条件
conditions = [df['A'] < 20,(df['A'] >= 20) & (df['A'] < 50),df['A'] >= 50
]
choices = ['Low', 'Medium', 'High']
df['level'] = np.select(conditions, choices, default='Unknown')
6. 分组聚合操作
python
# 分组向量化操作
df_grouped = df.groupby('category').agg({'A': ['mean', 'std', 'min', 'max'],'B': 'sum'
})# 分组后应用函数
df['group_mean'] = df.groupby('category')['A'].transform('mean')

 

http://www.hskmm.com/?act=detail&tid=29688

相关文章:

  • docker部署doris
  • ES客户端8版本与ES服务端7版本的兼容问题
  • 使用Sender和io_uring改造Webserver
  • 乐理 -04 打拍子
  • 1012
  • 如何在Renpy尝试中调整人物和背景图像大小
  • 开源软件站
  • 如何安装claude code以及ccr code
  • 代码托管平台
  • 1011
  • 209. 长度最小的子数组 滑动窗口+暴力
  • CISA事件响应实战经验:漏洞修复与应急响应关键教训
  • 机器人视觉系统在复杂环境中的自主决策与学习
  • 2025开关按钮厂家最新权威推荐榜:品质卓越与创新设计的行业
  • 装饰器
  • 记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题
  • 正睿25noip十连测day5
  • kettle插件-dm数据库插件,解决kettle9.X版本无法连接数据库资源库问题
  • 2025年10月武汉防水公司TOP5权威推荐榜:专业施工与优质服务的行业
  • 2025开发区婚纱照公司最新权威推荐榜:创意拍摄与贴心服务的
  • 用户交互scanner方法学习及使用示例
  • 2025工业网线厂家最新权威推荐榜:稳定传输与耐用品质的首选
  • 完整教程:STM32H743-ARM例程11-PWM
  • 20231427田泽航实验一-4
  • 2025铝合金微弧氧化定制厂家权威推荐榜:品质卓越与技术创新
  • 20231427田泽航实验一-3
  • 信息安全设计/密码系统设计 实验1-1
  • 2025年10月拉伸器厂家最新权威推荐榜:高效稳定与卓越品质的行业首
  • 2025数粒机厂家最新权威推荐榜:精准高效与智能控制的行业首
  • Spring拦截器HandlerInterceptor与Filter方法执行顺序探究