Wandering_night 2024-04-12 23:44 采纳率: 47.1%
浏览 2
已结题

用python找列表众的四分位数

我试图根据四分位数的位置来找目标数据,但点击运行后电脑半天输出不了(也没报错)。第一次遇到这种情况,请问该怎么处理?
(前面的大部分代码都是数据的预处理,最后八行才是问题的重点)

import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_excel("C:/Users/YHS/Desktop/数据分析作业/作业文件/data.xlsx")
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False  #正常显示负号

#将2000个数据转为一个列表
datas_1=df['工厂1'].tolist()
datas_2=df['工厂2'].tolist()
datas_3=df['工厂3'].tolist()
datas_4=df['工厂4'].tolist()
datas=[datas_1,datas_2,datas_3,datas_4]
#将4个列表合并为一个
data_list=sum(datas,[])
#排序
data_list_sorted = sorted(data_list)

#分组
groups=range(73,232,10)
#计算每一组的频数
s=pd.cut(data_list_sorted,bins=[frequency for frequency in groups])
frequency=s.value_counts()

L = data_list_sorted[499]
for group in s:
    while True:
        if L in group:
            print(group)
            break
        else:
            continue

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-04-12 23:46
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的关键在于你想根据四分位数的位置找到目标数据,但代码运行后出现了问题,无法输出结果。让我们来分析一下可能的原因以及解决方案:

    1. 代码逻辑问题 :你的代码似乎有些混乱。在for循环中,你使用了while True循环,但没有明确的停止条件,这可能导致无限循环。此外,你将数据切分为了区间,并尝试在每个区间中查找目标数据,但这种方法不够高效,也不是找到四分位数的正确方式。
    2. 性能问题 :如果数据量很大,你的代码可能因为效率低下而运行缓慢。特别是在使用while True循环时,如果没有明确的停止条件,可能会导致代码陷入无限循环,无法输出结果。
      针对以上问题,我建议修改代码逻辑,直接使用numpy库中的percentile函数来计算四分位数,并通过条件筛选来找到目标数据。以下是修改后的代码:
      pythonCopy code
      import matplotlib.pyplot as plt
      import pandas as pd
      import numpy as np
      # 读取数据
      df = pd.read_excel("C:/Users/YHS/Desktop/数据分析作业/作业文件/data.xlsx")
      plt.rcParams['font.sans-serif'] = ['SimHei']
      plt.rcParams['axes.unicode_minus'] = False
      # 将数据转为列表
      datas_1 = df['工厂1'].tolist()
      datas_2 = df['工厂2'].tolist()
      datas_3 = df['工厂3'].tolist()
      datas_4 = df['工厂4'].tolist()
      datas = [datas_1, datas_2, datas_3, datas_4]
      # 合并列表并排序
      data_list = sorted(sum(datas, []))
      # 计算四分位数
      Q1 = np.percentile(data_list, 25)
      Q2 = np.percentile(data_list, 50)
      Q3 = np.percentile(data_list, 75)
      # 输出四分位数
      print("第一四分位数(Q1):", Q1)
      print("第二四分位数(Q2):", Q2)
      print("第三四分位数(Q3):", Q3)
      # 根据条件筛选目标数据
      target_data = [data for data in data_list if data >= Q1 and data <= Q3]
      # 输出目标数据
      print("四分位数范围内的数据:", target_data)
      
      这样,你就可以直接获取到四分位数,并通过条件筛选找到目标数据,而不需要使用循环查找,提高了代码的效率和可读性。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月12日