如何根据另外两列中的重复项获得一个数据帧列中的范围



我有一个包含三列的数据帧:"sequences"、"smiles"one_answers"labels"。有些行在"sequences"one_answers"smiles"列中具有相同的字符串条目,但在"labels"列中有不同的浮点值。对于重复的序列和微笑,我希望获得这些重复行的"labels"列的值范围,这些值将存储在第四列中。我打算拒绝范围超过某个值的行。

我制作了一个包含所有重复值的数据帧:

duplicate_df = pd.concat(g for _, g in df.groupby(['sequence', 'smiles']) if len(g) > 1)

如何从df中获取标签的范围?

我能做这样的事吗?

duplicate_df.groupby(['Target_sequence', 'processed_SMILES']).range()

我的副本_df看起来是这样的:

pd.DataFrame({'Label': {86468: 55700.0,
86484: 55700.0,
86508: 55700.0,
124549: 55690.0,
124588: 55690.0},
'Target_sequence': {86468: 'AAPYLKTKFICVTPTTCSNTIDLPMSPRTLDSLMQFGNGEGAEPSAGGQF',
86484: 'AAPYLKTKFICVTPTTCSNTIDLPMSPRTLDSLMQFGNGEGAEPSAGGQF',
86508: 'AAPYLKTKFICVTPTTCSNTIDLPMSPRTLDSLMQFGNGEGAEPSAGGQF',
124549: 'AAPYLKTKFICVTPTTCSNTIDLPMSPRTLDSLMQFGNGEGAEPSAGGQF',
124588: 'AAPYLKTKFICVTPTTCSNTIDLPMSPRTLDSLMQFGNGEGAEPSAGGQF'},
'processed_SMILES': {86468: 'CCOC(=O)[NH+]1CC[NH+](C(=O)c2ccc(-n3c(=S)[n-]c4ccccc4c3=O)cc2)CC1',
86484: 'C[NH+]1CC[NH+](Cc2nc3ccccc3c(=O)n2Cc2nc(-c3ccccc3F)cs2)CC1',
86508: 'C[NH+]1CC[NH+](Cc2nc3ccccc3c(=O)n2Cc2nc(-c3cccc([N+](=O)[O-])c3)cs2)CC1',
124549: 'C[NH+]1CC[NH+](Cc2nc3ccccc3c(=O)n2Cc2nc(-c3cccc([N+](=O)[O-])c3)cs2)CC1',
124588: 'CCOC(=O)[NH+]1CC[NH+](C(=O)c2ccc(-n3c(=S)[n-]c4ccccc4c3=O)cc2)CC1'}})

例如,重复行中的项目相同,我希望在"range"列中有0。

df是按对象分组的有效聚合函数。因此,在用重复的数据创建CCD_3之后,您可以尝试:

df.groupby(['Target_sequence','processed_SMILES']).agg(Minimum = pd.NamedAgg(column='Label',aggfunc='min'),
Maximum = pd.NamedAgg(column='Label',aggfunc='max'))

编辑:

这是一个使用pd.NamedAgg的好机会,它在版本0.25:中发布

PD_6

最新更新