Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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
在数据帧中排列并合并重复行的pythonic方法_Python_Pandas_Numpy_Dataframe_Group By - Fatal编程技术网

在数据帧中排列并合并重复行的pythonic方法

在数据帧中排列并合并重复行的pythonic方法,python,pandas,numpy,dataframe,group-by,Python,Pandas,Numpy,Dataframe,Group By,我有一个大数据帧,格式如下: name ingredient colour similarity ids city country proba pesto ba g 0.93 4 ve it 0.85 pesto sa p 0.93

我有一个大数据帧,格式如下:

name       ingredient       colour      similarity      ids      city      country     proba
pesto      ba               g           0.93            4        ve        it          0.85
pesto      sa               p           0.93            3        to        ca          0.92
pesto      li               y           0.99            6        lo        en          0.81
pasta      fl               w           0.88            2        de        in          0.8
pasta      wa               b           0.93            1        da        te          0.84
egg        eg               w           1               5        ro        ja          0.99
我想根据它们的
相似性对所有
名称
进行排名(相似性越高,排名越高,如果两行具有相同的相似性,那么它们的附加顺序就不重要),然后将所有重复的行合并在一起

输出如下所示:

name   ingredient          colour           similarity         ids        city               country            proba
pesto  ['li', 'ba', 'sa']  ['y', 'g', 'p']  [0.99, 0.93, 0.93] [6, 4, 3]  ['lo', 've', 'to'] ['en', 'it', 'ca'] [0.81, 0.85, 0.92]
pasta  ['wa', 'fl']        ['b', 'w']       [0.93, 0.88]       [1, 2]     ['da', 'de']       ['te', 'in']       [0.84, 0.8]
egg    ['eg']              ['w']            [1]                [5]        ['ro']             ['ja']             [0.99]

如果
名称
的顺序很重要,则首先将
名称
转换为原始排序的有序分类,然后按列和最后一个聚合
列表进行排序
s:

df['name'] = pd.Categorical(df['name'], ordered=True, categories=df['name'].unique())

df1=df.sort_values(['name','similarity'], ascending=[True, False]).groupby('name').agg(list)

print (df1)
         ingredient     colour          similarity        ids          city  \
name                                                                          
pesto  [li, ba, sa]  [y, g, p]  [0.99, 0.93, 0.93]  [6, 4, 3]  [lo, ve, to]   
pasta      [wa, fl]     [b, w]        [0.93, 0.88]     [1, 2]      [da, de]   
egg            [eg]        [w]               [1.0]        [5]          [ro]   

            country               proba  
name                                     
pesto  [en, it, ca]  [0.81, 0.85, 0.92]  
pasta      [te, in]         [0.84, 0.8]  
egg            [ja]              [0.99]  
另一个想法是按组排序:

df1 = (df.groupby('name', group_keys=False, sort=False)
         .apply(lambda x: x.sort_values('similarity', ascending=False))
         .groupby('name', sort=False).agg(list))
如果可以按
名称的顺序排序,例如降序:

df2 = (df.sort_values(['name','similarity'], ascending=False)
         .groupby('name', sort=False)
         .agg(list))

print (df2)
         ingredient     colour          similarity        ids          city  \
name                                                                          
pesto  [li, ba, sa]  [y, g, p]  [0.99, 0.93, 0.93]  [6, 4, 3]  [lo, ve, to]   
pasta      [wa, fl]     [b, w]        [0.93, 0.88]     [1, 2]      [da, de]   
egg            [eg]        [w]               [1.0]        [5]          [ro]   

            country               proba  
name                                     
pesto  [en, it, ca]  [0.81, 0.85, 0.92]  
pasta      [te, in]         [0.84, 0.8]  
egg            [ja]              [0.99]  

哎呀,最后我错过了
a
o
,对不起,我也在想同样的问题,对
名称
相似性
pd进行排序。分类
是一种很好的方法!