Python 在数据帧上使用groupby按一列重新排列,最大值仅为另一列

Python 在数据帧上使用groupby按一列重新排列,最大值仅为另一列,python,pandas,dataframe,Python,Pandas,Dataframe,我试着用我的原始数据和代码来问这个问题,但我意识到这可能太难了,所以我将尝试创建一些玩具数据来简化这个问题。以下是一些玩具数据的代码,应易于复制/粘贴以复制: import pandas as pd df = pd.DataFrame([['A boy ran.', [1,2], 1, [5,7], 0.997], ['A good pet.', [7,9], 0, [3,2], 0.977], ['The car is fast.', [7,5], 1, [1,9], 0.962], ['T

我试着用我的原始数据和代码来问这个问题,但我意识到这可能太难了,所以我将尝试创建一些玩具数据来简化这个问题。以下是一些玩具数据的代码,应易于复制/粘贴以复制:

import pandas as pd

df = pd.DataFrame([['A boy ran.', [1,2], 1, [5,7], 0.997], ['A good pet.', [7,9], 0, [3,2], 0.977], ['The car is fast.', [7,5], 1, [1,9], 0.962], ['The girl sang.', [0,5], 2, [4,1], 0.992]], columns=['sentences', 'embeddings', 'labels', 'cluster_centres', 'cosine_scores'])
print(df)

new_df = df.groupby(['labels']).max()
print(new_df)
初始数据帧(
df
)有5列,这些列模仿我的原始数据(除了值要简单得多):
语句
每行包含一个句子,
嵌入
集群中心
每行包含一个数字数组,
标签
包含0,1或2的值,而
cosine_分数
在每一行中都包含一个浮点数

我想根据
标签
列中的值对行进行分组(因此0s、1s和2s在一起),然后从行中的
句子
列中获取句子,该列具有每个标签的
余弦分数
列中的最大值。为了澄清,在上面的示例中,
labels
列中有两行的值为1。第一行(在行索引=0时)的余弦_分数高于另一行(在行索引=2时)(具体而言:0.997>0.962)。因此,对于1的标签,我希望使用index=0中的句子(
“一个男孩跑了。”
)。但是,当我运行上面的代码时,我得到了
new_df
的以下数据帧:

               sentences embeddings cluster_centres  cosine_scores
labels                                                            
0            A good pet.     [7, 9]          [3, 2]          0.977
1       The car is fast.     [7, 5]          [5, 7]          0.997
2         The girl sang.     [0, 5]          [4, 1]          0.992

如您所见,它为labels=1的余弦_分数选择了正确的最大值(行索引=0的0.997),但是,在句子列中,它选择了错误的句子(应该是
一个男孩跑了
,而不是
汽车很快
)。根据我对实际数据的分析,这是因为它选择了以“max”字母开头的句子(即字母顺序较晚的字母,在本例中T在A之后,因此选择了另一个句子)无论如何,我的问题是,如何仅为余弦_分数选择最大值,并从与
标签中每个标签的最大值相同的行返回其他列?谢谢你的帮助

根据标签和余弦分数排序,并应用拖放副本

df.sort_值(['labels','cosine_scores'],升序=False)。删除重复项(['labels'])
它给出以下输出

        sentences embeddings  labels cluster_centres  cosine_scores
3  The girl sang.     [0, 5]       2          [4, 1]          0.992
0      A boy ran.     [1, 2]       1          [5, 7]          0.997
1     A good pet.     [7, 9]       0          [3, 2]          0.977

根据标签和余弦分数进行排序,并应用拖放重复项

df.sort_值(['labels','cosine_scores'],升序=False)。删除重复项(['labels'])
它给出以下输出

        sentences embeddings  labels cluster_centres  cosine_scores
3  The girl sang.     [0, 5]       2          [4, 1]          0.992
0      A boy ran.     [1, 2]       1          [5, 7]          0.997
1     A good pet.     [7, 9]       0          [3, 2]          0.977

Nevermind:(此方法和顶部链接中的所有方法都对玩具数据起作用,但当我尝试在实际数据上使用它们时,会出现各种错误…不知道为什么。Nevermind再次起作用,我的cosine_分数列实际上是原始数据集中的数组,必须从中提取浮点数,谢谢:)Nevermind:(此方法和顶部链接中的所有方法都对玩具数据起作用,但当我尝试在实际数据上使用它们时,会出现各种错误…不知道为什么。不管怎样,它再次起作用,我的余弦分数列实际上是原始数据集中的数组,必须从中提取浮点数,谢谢:)