鱼C论坛

 找回密码
 立即注册
查看: 2770|回复: 1

[已解决]不规范条件过滤数据帧,求大师的帮忙,谢谢

[复制链接]
发表于 2023-5-7 13:11:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pandas as pd

data = [['AA','光伏设备/2.51  ?医疗服务/3.75  ?色金属6.39'],
        ['BW','色金属/4.39  ?电子/5.31  ?电设/18.2'],
        ['BW','电子/5.31  ?金属/5.31  ?电设/18.2'],
        ['BG','色金属/8.39  ?电子元件/5.31  ?设备/8.82']]

columns = ["编号",'清单']
df = pd.DataFrame(data, columns=columns)
print(df)

上述数据帧的《清单》列,可以根据某条件:如,色金属/5.88  过滤掉不符合要求的行
就是两个条件,一是色金属,二是反斜杠后面的数字要大于5.88

有什么好办法吗?求大师的帮忙,谢谢

结果;
   编号                               清单
0  AA  光伏设备/2.51  ?医疗服务/3.75  ?色金属6.39
3  BG   色金属/8.39  ?电子元件/5.31  ?设备/8.82
最佳答案
2023-5-7 13:14:15
我可以帮你用 pandas 过滤数据帧。根据你的要求,你需要根据《清单》列中的子字符串“色金属”和反斜杠后面的数字是否大于 5.88 来过滤行。你可以参考以下的代码:
  1. # 导入 pandas 模块
  2. import pandas as pd

  3. # 创建数据帧
  4. data = [['AA','光伏设备/2.51 ?医疗服务/3.75 ?色金属6.39'],
  5. ['BW','色金属/4.39 ?电子/5.31 ?电设/18.2'],
  6. ['BW','电子/5.31 ?金属/5.31 ?电设/18.2'],
  7. ['BG','色金属/8.39 ?电子元件/5.31 ?设备/8.82']]

  8. columns = ["编号",'清单']
  9. df = pd.DataFrame(data, columns=columns)

  10. # 定义一个函数,用来判断清单中是否包含“色金属”和大于 5.88 的数字
  11. def filter_func(x):
  12.     # 如果清单中包含“色金属”,则分割字符串并获取数字
  13.     if "色金属" in x:
  14.         num = float(x.split("色金属")[1].split("?")[0].strip("/"))
  15.         # 如果数字大于 5.88,返回 True,否则返回 False
  16.         return num > 5.88
  17.     # 如果清单中不包含“色金属”,返回 False
  18.     else:
  19.         return False

  20. # 使用 apply 方法和 lambda 表达式,对数据帧的清单列应用过滤函数
  21. df_filtered = df[df["清单"].apply(lambda x: filter_func(x))]

  22. # 打印过滤后的数据帧
  23. print(df_filtered)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-7 13:14:15 | 显示全部楼层    本楼为最佳答案   
我可以帮你用 pandas 过滤数据帧。根据你的要求,你需要根据《清单》列中的子字符串“色金属”和反斜杠后面的数字是否大于 5.88 来过滤行。你可以参考以下的代码:
  1. # 导入 pandas 模块
  2. import pandas as pd

  3. # 创建数据帧
  4. data = [['AA','光伏设备/2.51 ?医疗服务/3.75 ?色金属6.39'],
  5. ['BW','色金属/4.39 ?电子/5.31 ?电设/18.2'],
  6. ['BW','电子/5.31 ?金属/5.31 ?电设/18.2'],
  7. ['BG','色金属/8.39 ?电子元件/5.31 ?设备/8.82']]

  8. columns = ["编号",'清单']
  9. df = pd.DataFrame(data, columns=columns)

  10. # 定义一个函数,用来判断清单中是否包含“色金属”和大于 5.88 的数字
  11. def filter_func(x):
  12.     # 如果清单中包含“色金属”,则分割字符串并获取数字
  13.     if "色金属" in x:
  14.         num = float(x.split("色金属")[1].split("?")[0].strip("/"))
  15.         # 如果数字大于 5.88,返回 True,否则返回 False
  16.         return num > 5.88
  17.     # 如果清单中不包含“色金属”,返回 False
  18.     else:
  19.         return False

  20. # 使用 apply 方法和 lambda 表达式,对数据帧的清单列应用过滤函数
  21. df_filtered = df[df["清单"].apply(lambda x: filter_func(x))]

  22. # 打印过滤后的数据帧
  23. print(df_filtered)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 03:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表