Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python dataframe中拆分数据并自动获取数组值_Python_Pandas_Numpy - Fatal编程技术网

在python dataframe中拆分数据并自动获取数组值

在python dataframe中拆分数据并自动获取数组值,python,pandas,numpy,Python,Pandas,Numpy,上面是我的python代码,我已经将数据帧分成10个相等的部分并绘制了图表,但我对此不满意,我有两个顾虑: array_x=[10,20,30,40,50,60,70,80,90100]在这行代码中,我已经手动获取了x值,是否有任何方法可以自动处理,因为我已经获取了split(数据,10),它应该显示10个数组值 正如我们可以看到的那样,整个数据1,2,3,4…10正在一次又一次地重复,有没有一个解决方案将其写入函数或循环中 任何代码方面的帮助都将不胜感激。谢谢我相信您需要列表理解,对于计数,

上面是我的python代码,我已经将数据帧分成10个相等的部分并绘制了图表,但我对此不满意,我有两个顾虑:

  • array_x=[10,20,30,40,50,60,70,80,90100]在这行代码中,我已经手动获取了x值,是否有任何方法可以自动处理,因为我已经获取了split(数据,10),它应该显示10个数组值

  • 正如我们可以看到的那样,整个数据1,2,3,4…10正在一次又一次地重复,有没有一个解决方案将其写入函数或循环中

  • 任何代码方面的帮助都将不胜感激。谢谢

    我相信您需要列表理解,对于计数,可以使用更简单的方式-
    sum
    布尔掩码,
    True
    值是类似
    1
    的过程,然后将列表转换为numpy数组并使用:


    样本

    data = pd.read_csv('D:\ history/segment.csv')
    data = data.sort_values('Prob_score', ascending=False)
    
    one = len(data)
    actualpaid_overall = (data['paidstatus'] == 1).sum()
    
    data_split = np.array_split(data, 10)
    
    x = [len(x) for x in data_split]
    y = [(x['paidstatus'] == 1).sum()/actualpaid_overall for x in data_split]
    
    array_x = np.cumsum(np.array(x))
    array_y = np.cumsum(np.array(y))
    
    plt.xlabel(' Base')
    plt.ylabel(' percent')
    ax = plt.plot(array_x,array_y)
    plt.minorticks_on()
    plt.grid(which='major', linestyle='-', linewidth=0.5, color='0.1')
    plt.grid( which='both', axis = 'both',  linewidth=0.5,color='0.75')
    

    np.array_split(data,5)假设我的数据帧中有100行,它会平均分割成5行,每个分割集中有20行。现在我的数组应该是array_x=[1,2,3,4,5]np.cumsum如果我使用这个,我会得到数组_x为[20,40,60,80100],对吗?但是我不需要[1,2,3,4,5]那样的总数。如果我给出split(data,5),那么array_x应该自动赋值为array_x=[1,2,3,4,5]。如果我给split(data,10),Array_x应该是Array_x=[1,2,3,4,5,6,7,8,9,10]哦,很抱歉你是对的boss应该是[10,20,30,40,50,60,70,80,90100]而不是[1,2,3,4,5,6,7,8,9,10].实际上,我的逻辑是在10%的总体数据中,我需要找出有多少客户是付费的,20%中有多少是付费的,因此onLets假设我的数据框中有1000个客户,我需要将它们拆分为10个,以便每个拆分都有100个客户,依此类推。我需要在图中用10%,20%到100%的分割来绘制这个,因为我在x轴上给出了分割(10),在y轴上给出了付费客户的总和。我对y轴没有问题,因为u给出的代码是正确的,工作良好,而不是这个代码bro前面的一个数组_x=np.arange(10)+1
    data = pd.read_csv('D:\ history/segment.csv')
    data = data.sort_values('Prob_score', ascending=False)
    
    one = len(data)
    actualpaid_overall = (data['paidstatus'] == 1).sum()
    
    data_split = np.array_split(data, 10)
    
    x = [len(x) for x in data_split]
    y = [(x['paidstatus'] == 1).sum()/actualpaid_overall for x in data_split]
    
    array_x = np.cumsum(np.array(x))
    array_y = np.cumsum(np.array(y))
    
    plt.xlabel(' Base')
    plt.ylabel(' percent')
    ax = plt.plot(array_x,array_y)
    plt.minorticks_on()
    plt.grid(which='major', linestyle='-', linewidth=0.5, color='0.1')
    plt.grid( which='both', axis = 'both',  linewidth=0.5,color='0.75')
    
    np.random.seed(2019)
    N = 1000
    data = pd.DataFrame({'paidstatus':np.random.randint(3, size=N),
                         'Prob_score':np.random.randint(100, size=N)})
    #print (data)
    
    data = data.sort_values(['Prob_score'], ascending=[False])
    
    actualpaid_overall = (data['paidstatus'] == 1).sum()
    
    data_split = np.array_split(data, 10)
    
    x = [len(x) for x in data_split]
    y = [(x['paidstatus'] == 1).sum()/actualpaid_overall for x in data_split]
    
    array_x = np.cumsum(np.array(x))
    array_y = np.cumsum(np.array(y))
    
    print (array_x)
    [ 100  200  300  400  500  600  700  800  900 1000]
    
    print (array_y)
    [0.09118541 0.18844985 0.27963526 0.38601824 0.49848024 0.61702128
     0.72036474 0.81155015 0.9331307  1.        ]