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