Python 需要根据特定列的某些规则在数据框中添加新列

Python 需要根据特定列的某些规则在数据框中添加新列,python,pandas,data-processing,Python,Pandas,Data Processing,我在Pandas中有一个数据帧(使用Python 3.7),如下所示: print("DATA FRAME DATA= \n",bin_data_df_sorted.head(5)) # OUTPUT: # DATA FRAME DATA= # actuals probability # 0 0.0 0.116375 # 1 0.0 0.239069 # 2 1.0 0.591988 # 3 0.0 0.2737

我在Pandas中有一个数据帧(使用Python 3.7),如下所示:

print("DATA FRAME DATA= \n",bin_data_df_sorted.head(5))
# OUTPUT:
# DATA FRAME DATA= 
#     actuals  probability
# 0      0.0     0.116375
# 1      0.0     0.239069
# 2      1.0     0.591988
# 3      0.0     0.273709
# 4      1.0     0.929855
我需要添加名为“bucket”的额外列,以便:

If probability value in between (0,0.1), then bucket=1
If probability value in between (0.1,0.2), then bucket=2
If probability value in between (0.2,0.3), then bucket=3
If probability value in between (0.3,0.4), then bucket=4
If probability value in between (0.4,0.5), then bucket=5
If probability value in between (0.5,0.6), then bucket=6
If probability value in between (0.6,0.7), then bucket=7
If probability value in between (0.7,0.8), then bucket=8
If probability value in between (0.8,0.9), then bucket=9
If probability value in between (0.9,1), then bucket=10
因此,输出应如下所示:

#     actuals  probability   bucket
# 0      0.0     0.116375      2
# 1      0.0     0.239069      3   
# 2      1.0     0.591988      6
# 3      0.0     0.273709      3
# 4      1.0     0.929855      10
我们怎么做

注意:我已经尝试了下面的代码,但它不能正常工作

> for val in bin_data_df_sorted['probability']:
>     if val >= 0.0 and val <=0.1:
>         bin_data_df_sorted['bucket']=1
>     elif val > 0.1 and val <=0.2:
>         bin_data_df_sorted['bucket']=2
>     elif val > 0.2 and val <=0.3:
>         bin_data_df_sorted['bucket']=3
and so on.. 
bin_数据中val的排序[‘概率’]: >如果val>=0.0且val bin_数据_df_排序['bucket']=1 >elif val>0.1,val bin_数据_df_排序['bucket']=2 >elif val>0.2,val bin_数据_df_排序['bucket']=3 等等 您可以使用:


细节

pd.将序列中的值切割成离散的间隔。因此,您需要指定一些要根据的标准。你可以做:

bins = np.arange(0,1.1, 0.1)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
以及返回的箱子的一些标签,在这种情况下,可以使用相同的
箱子生成这些标签:

(bins*10)[1:]
# array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

现在,如果我需要绘制一个直方图,x轴=桶数(即1到10),y轴=“实际值”之和。那我该怎么做呢?试试
df.groupby('bucket').actuals.sum().plot(kind='bar')
@Bhuvi007
(bins*10)[1:]
# array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])