在python dataframe中拆分数据并自动获取数组值
上面是我的python代码,我已经将数据帧分成10个相等的部分并绘制了图表,但我对此不满意,我有两个顾虑:在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正在一次又一次地重复,有没有一个解决方案将其写入函数或循环中 任何代码方面的帮助都将不胜感激。谢谢我相信您需要列表理解,对于计数,
任何代码方面的帮助都将不胜感激。谢谢我相信您需要列表理解,对于计数,可以使用更简单的方式-
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. ]