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)