当前位置: 首页 > 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.gsyq.cn/news/19815.html

相关文章:

  • AI 改变数据库产品实践探索
  • 1012
  • 209. 长度最小的子数组 滑动窗口+暴力
  • CISA事件响应实战经验:漏洞修复与应急响应关键教训
  • 2025开关按钮厂家最新权威推荐榜:品质卓越与创新设计的行业
  • 记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题
  • QT6中QGraphicsView特性与应用
  • 2025工业网线厂家最新权威推荐榜:稳定传输与耐用品质的首选
  • 2025/10/12
  • 2025铝合金微弧氧化定制厂家权威推荐榜:品质卓越与技术创新
  • 2025数控滚齿机订制厂家权威推荐:高精度与高效能的首选品牌
  • 2025婚纱摄影工作室权威推荐榜:捕捉幸福瞬间的创意大师
  • hex、bin、axf文件的区别
  • ROS2之TF
  • 代码源2025长训
  • 代码源国庆模拟赛
  • 乐理 -02调式
  • 深入解析:在 CentOS 7.6 上安装 Oracle WebLogic Server 12c 详细教程
  • 使用DiskGenius检查硬盘状态信息的与坏道检测
  • 软中断softirq的CPU使用率升高
  • 案例分析-DDOS攻击、网络延迟(延迟确认纳格算法)、NAT延迟
  • 增加客户粘性
  • 2025 年卧式离心机厂家 TOP 企业品牌推荐排行榜,LW250/LW350/LW450/LW530/LW540 / 专业卧式离心机推荐这十家公司!
  • 内存知识总结
  • 读书笔记:关于Oracle里的“老古董”:LONG类型
  • 内存泄漏与SWAP
  • 2025安全光栅厂家最新权威推荐榜:精准防护与高效性能的工业
  • 2025年10月精加工车间恒温恒湿系统厂家推荐:精准控温与高效节能首
  • 977. 有序数组的平方 双指针
  • 【IMU】6轴数据校准算法