Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Python 3.x_Dataframe_Pandas Groupby_Sklearn Pandas - Fatal编程技术网

Python 如何将分类列和数字列进行分组,并在此基础上对数值进行分类

Python 如何将分类列和数字列进行分组,并在此基础上对数值进行分类,python,python-3.x,dataframe,pandas-groupby,sklearn-pandas,Python,Python 3.x,Dataframe,Pandas Groupby,Sklearn Pandas,我有一个数据集,其中“类型”列基本上是形状,与之对应,“体积”列由该形状的体积组成 现在,我需要执行以下任务: 按形状分组 对于每个形状,按体积分组 对于每个形状和体积,定义一个范围和形状容器 输入: Type Volume Cylinder 100 Square 300 Cylinder 200 Oval 100 Square 320 Cylinde

我有一个数据集,其中“类型”列基本上是形状,与之对应,“体积”列由该形状的体积组成

现在,我需要执行以下任务:

  • 按形状分组
  • 对于每个形状,按体积分组
  • 对于每个形状和体积,定义一个范围和形状容器
  • 输入:

     Type             Volume
    
     Cylinder          100
     Square            300
     Cylinder          200
     Oval              100
     Square            320
     Cylinder          150
     Oval              600
     Round             1000
     Square            900
     Round             1500
    
    输出:

     Type              Volume       Bin
    
     Cylinder          100            1
     Cylinder          150            1
     Cylinder          200            2
     Oval              100            1
     Oval              600            3
     Round             1000           1
     Round             1500           2
     Square            300            1
     Square            320            1
     Square            900            3
    
    垃圾箱如下所示:

    1.气缸->料仓1(100-200)、料仓2(201-300)

    2.椭圆形->Bin1(100-200)。。。。。Bin3(500-600)。。。。

    代码:


    我想你可以试试下面的代码

    testdf=df.groupby('Type',as_index=False)。应用(lambda x:x.groupby(pd.cut(x[“Vol”]、np.arange(x[“Volume”].min()、x[“Volume”].max()、200)),as_index=False)。应用(测试)
    
    这里发生的是,第一个
    groupby
    基本上将数据帧分组到“Type”类别中,然后您希望根据范围对其进行分组。为此,您可以使用lambda函数再次分组,使用
    pd.cut
    函数根据您的范围对间隔进行小的切割。在这种情况下,我只是取最大值和最小值,并以200的间隔进行切割。在此之后,如果您想将输出重新合并在一起形成一个数据帧,请使用另一个apply将它们重新合并。 像这样,

    def测试(组):
    #在这里写下你的函数。你想演什么就演什么。
    返回组。合并(组)
    
    我在这里使用
    as_index=False
    重置索引,以便根据新索引重新排列数据帧

    希望这有帮助

    编辑:- 对于BIN,您不必担心,因为每个
    groupby
    都会创建一个新的索引,您可以将其用于自己的目的。如:

    Index1 Index2类型卷
    0缸100
    0缸140
    0 1汽缸250
    10椭圆形154
    14.999
    2 1圈328
    
      grouped=df_dim.groupby('Type', as_index=False)
      def test(group):
         return group.reset_index()
      def group_vol(group):
         groupedVol = 
             group.groupby(pd.cut(group["Target_BrimVol"],
             np.arange(0,5000,200)),as_index=False)
    
         return groupedVol.apply(test)
    
      gr = grouped.apply(group_vol)
      print(gr)