基于python中的值来禁止文件

问题描述 投票:0回答:1

我正在尝试将值分类到用于我的数据的某些自定义分类中。数据帧中的Coulmn1由一大组从1.4到1.9的随机数组成。假设初始数据帧如下所示:

Index    Col1
1        1.4678
2        1.5001
3        1.5795
4        1.5234 
...      ......
98       1.6754
99       1.6399
100      1.4910

我想做的是将落在下面所列垃圾箱+/- 0.002之内的数字分类。即我要对第一个bin的所有位于1.458和1.462之内的数据进行bin。输出应如下所示

Index    Col1       Bin_names
1        1.4678      NaN
2        1.5001      1.50
3        1.5795      1.58
4        1.5234      NaN
...      ......      ....
98       1.6754      NaN
99       1.6399      1.64
100      1.4910      NaN

我尝试了下面的代码,但是将所有介于1.46到1.48之间的数据合并到一个容器中,这不是我想要的。

bins = [1.46,1.48,1.5,1.52,1.54,1.56,1.58,1.60,1.62,1.64,1.66,1.68,1.70]
df['Bin_names'] = pd.cut(df['Column1'], bins, labels=['1.48','1.5','1.52','1.54','1.56','1.58','1.60','1.62','1.64','1.66','1.68','1.70'])

如何根据我的需求对数据进行分类?

python binning
1个回答
0
投票

默认情况下,pd.cut()的边界包含右边缘,因此您可以从标签“ 1.46”开始。

import pandas as pd
import numpy as np
import random
random.seed(10)

df = pd.DataFrame({'Col1':[round(random.uniform(1.450, 1.700),4) for i in range(100)]}, index=np.arange(1,101,1))

bins = [1.46,1.48,1.50,1.52,1.54,1.56,1.58,1.60,1.62,1.64,1.66,1.68,1.70]
labels = ['1.46','1.48','1.50','1.52','1.54','1.56','1.58','1.60','1.62','1.64','1.66','1.68']

df['Bin_names'] = pd.cut(df['Col1'], bins, labels=labels,right=False)
df.sort_values('Col1', inplace=True)
df2 = df.groupby('Bin_names').agg(list)
df3 = df2['Col1'].apply(pd.Series)
df3['cnt'] = df3.count(axis=1, numeric_only=True)
df3


       0    1   2   3   4   5   6   7   8   9   10  11  cnt
Bin_names                                                   
1.46    1.4611  1.4611  1.4657  1.4662  1.4700  1.4742  1.4782  1.4799  NaN NaN NaN NaN 8
1.48    1.4832  1.4835  1.4874  1.4891  1.4901  1.4912  1.4914  1.4916  1.4946  NaN NaN NaN 9
1.50    1.5015  1.5061  1.5104  1.5114  1.5125  1.5187  NaN NaN NaN NaN NaN NaN 6
1.52    1.5209  1.5257  1.5286  1.5299  1.5319  1.5329  1.5369  NaN NaN NaN NaN NaN 7
1.54    1.5415  1.5435  1.5454  1.5476  1.5503  1.5532  1.5535  1.5551  1.5572  1.5583  1.5587  1.5590  12
1.56    1.5603  1.5620  1.5639  1.5642  1.5654  1.5700  1.5723  1.5725  1.5742  NaN NaN NaN 9
1.58    1.5800  1.5802  1.5813  1.5834  1.5847  1.5872  1.5918  1.5929  1.5945  1.5957  1.5961  1.5962  12
1.60    1.6003  1.6005  1.6008  1.6033  1.6043  1.6122  1.6134  1.6145  1.6155  1.6183  1.6187  NaN 11
1.62    1.6215  1.6281  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2
1.64    1.6420  1.6439  1.6444  1.6519  1.6533  1.6545  1.6553  1.6559  NaN NaN NaN NaN 8
1.66    1.6610  1.6638  1.6650  1.6674  1.6745  1.6776  NaN NaN NaN NaN NaN NaN 6
1.68    1.6853  1.6869  1.6882  1.6922  1.6923  1.6956  1.6991  NaN NaN NaN NaN NaN 7
© www.soinside.com 2019 - 2024. All rights reserved.