大熊猫分组

詹姆士

我有一个下面的熊猫表(示意上):

在此处输入图片说明

现在我想对它进行排序...

...以这样的方式:

  1. 数据框按名称排序

  2. 具有相同名称和相似列表元素的行被分组在一起。“相似”是指两个相邻行应具有一个列表元素,其中这些行之间的列表元素之差在某个阈值之内(在这里我选择5)。

换句话说:对于任何两个相邻行,如果第一行中存在一个元素,而第二行中存在一个元素,使得差异在阈值之内,则应将它们分组在一起。

  1. 这些组应该重命名。

结果应如下所示:

在此处输入图片说明

编辑:我试过的:df.sort_values([['name'],ascending = False).groupby('List')

但这当然是行不通的,因为每个列表都是一个新的组,因为我不能引入“相似性”。

EDIT2:这是一个重现熊猫数据框的代码:

import pandas as pd
df = pd.DataFrame({
    'List' : [[2,4],[3,5],[16,19],[4,1],[14,15],[300,20]],
    'Name' :  ["A","C","A","A","A","A"]})
BEN_YO

我们需要在这里使用新的“ G”段,并使用 groupby

df['G']=df.L.apply(max)
df=df.sort_values(['Name','G'])

df['G']=df.groupby(['Name']).G.apply(lambda x : x.diff().fillna(0).gt(5).cumsum())
df.Name=df.Name+'_'+df.G.astype(str)
df
Out[1287]: 
           L Name  G
0     [2, 4]  A_0  0
3     [4, 1]  A_0  0
4   [14, 15]  A_1  1
2   [16, 19]  A_1  1
5  [300, 20]  A_2  2
1     [3, 5]  C_0  0

数据输入

df=pd.DataFrame({'Name':list('ACAAAA'),'L':[[2,4],[3,5],[16,19],[4,1],[14,15],[300,20]]})

这是更新:

df['G']=df.L.apply(max)
df['G1']=df.L.apply(min)
df=df.sort_values(['Name','G'])

df['G']=df.groupby(['Name']).G.apply(lambda x : x.diff().fillna(0).gt(5))
df=df.sort_values(['Name','G1'])
df['G1']=df.groupby(['Name']).G1.apply(lambda x : x.diff().fillna(0).gt(5))
df.groupby('Name').apply(lambda x : ((x.G)|(x.G1)).cumsum())

df.Name=df.Name+'_'+df.groupby('Name').apply(lambda x : ((x.G)|(x.G1)).cumsum()).reset_index(level=0,drop=True).astype(str)
df
Out[1307]: 
           L Name      G     G1
3     [4, 1]  A_0  False  False
0     [2, 4]  A_0  False  False
4   [14, 15]  A_1   True   True
2   [16, 19]  A_1  False  False
5  [300, 20]  A_2   True  False
1     [3, 5]  C_0  False  False

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章