Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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 如何使用熊猫';数据帧不同部分的剪切方法?_Python_Pandas - Fatal编程技术网

Python 如何使用熊猫';数据帧不同部分的剪切方法?

Python 如何使用熊猫';数据帧不同部分的剪切方法?,python,pandas,Python,Pandas,我从当地一个卖车的网站上搜集了一些数据。我有一些有用的数据,比如汽车的生产年份、里程数、价格等。我有一个年份价格图,但我想根据里程数对其进行着色,这样,对于每一年,相应的里程数可以分为三类 我尝试了以下代码: df.milage_year = df.loc[df.year==1395].cut(df.milage, 3, labels=['g', 'y', 'r']) 但我得到了这个错误: AttributeError:“DataFrame”对象没有属性“cut” 更新:切割方法根据值工作!但

我从当地一个卖车的网站上搜集了一些数据。我有一些有用的数据,比如汽车的生产年份、里程数、价格等。我有一个年份价格图,但我想根据里程数对其进行着色,这样,对于每一年,相应的里程数可以分为三类

我尝试了以下代码:

df.milage_year = df.loc[df.year==1395].cut(df.milage, 3, labels=['g', 'y', 'r'])
但我得到了这个错误:

AttributeError:“DataFrame”对象没有属性“cut”

更新:切割方法根据值工作!但是,如果我们想根据案例数量进行分类,我们应该使用哪种方法

更新2:这是我的输入数据:

    mileage price       year
0   41000   70000000    1396
1   33011   73000000    1396
2   2200    81000000    1397
3   116000  45000000    1389
4   18000   71000000    1394
5   54033   65000000    1395
6   183000  42000000    1385
7   226053  44000000    1387
8   150000  45000000    1387
9   4000    78000000    1397
10  246000  42500000    1388
11  143500  35000000    1382
12  197000  40000000    1387
13  250000  38000000    1385
14  2795    81000000    1397
15  17000   40000000    1397
16  180000  30000000    1389
17  100000  61000000    1394
18  27223   71000000    1396
19  140000  49500000    1388
20  65500   71000000    1396

我的预期输出是一个名为Miledge_year的新列,它有三个值:“g”,“y”和“r”,这些值分配给每个“年”的“里程数”,因此,在里程数较高的情况下,三分之一的情况下获得“r”,值较低的情况下,三分之一的情况下获得“g”,其余三分之一的情况下获得“y”

您可以
分组,然后
应用
qcut
如下:

df['mileage_year'] = df.groupby('year').mileage.apply(lambda x: pd.qcut(x, 3, labels=['g', 'y', 'r'], duplicates='drop'))

请花点时间阅读这篇文章,以及如何提供答案,并相应地修改你的问题。关于的这些提示也可能有用,例如
pd.cut(df.loc[df.year==1395,'milage'],3,labels=['g','y','r'])
也可能有用。
cut
不能在数据帧的实例上调用。我知道让人们看医生很老了,但这只是其中之一,谢谢。成功了。但剩下的问题是,这段代码在其他行中放置了一个NaN!因此,只有最后一年列有正确的信息。df.loc[df.year==1395,'milage_year']=pd.cut(df.loc[df.year==1395,'milage'],3,labels=['g','y','r'])这起作用了!谢谢非常感谢。但是cut做了一些不同的事情。它将一系列数据分为三个子类。但我想要的是,根据病例数量进行削减。让我用一个例子来解释:假设我们有这些1392年的里程值:[1900001850001800001700001650001500001100009500010000]这个代码将给我们:['r','r','r','r','r','r','r','r','r','r','y','g','g'],而我想要:['r','r','y','y','g','g']值错误:Bin边必须是唯一的:数组([252000252000252000252000252000])。您可以通过设置“duplicates”参数来删除重复边。您可以将
duplicates='drop'
添加到qcut功能上。实际操作:value错误:Bin标签必须比Bin边的数量少一个请注意:
drop
无法与
标签一起工作-(