pandas DataFrame如何将每行Col1值与Val1更高的其他行Col1值配对
实现方法
因为你提供的 DataFrame 已经按 Val1 列升序完成排序,Col1 列的元素顺序对应的 Val1 是从小到大排列的,只需要对 Col1 的所有取值生成长度为2的不重复组合,即可直接得到符合要求的配对结果,不需要额外做数值大小判断,500行数据的场景下执行效率很高。
代码实现
import pandas as pd from itertools import combinations # df 替换为你已经完成排序的 DataFrame 即可 result = [list(pair) for pair in combinations(df['Col1'], 2)]
示例测试
针对你给出的示例数据,完整测试代码如下:
import pandas as pd from itertools import combinations # 构造示例排序DataFrame df = pd.DataFrame({ 'Col1': ['asd', 'pqer', 'psdf'], 'Val1': [0.27, 0.37, 0.54] }) # 生成配对结果 result = [list(pair) for pair in combinations(df['Col1'], 2)] print(result)
执行后输出结果和你要求的完全一致:
[['asd', 'pqer'], ['asd', 'psdf'], ['pqer', 'psdf']]
说明
itertools.combinations 会严格按照输入序列的顺序生成不重复的元素组合,由于你的 DataFrame 已经提前按 Val1 升序排序,因此生成的每一组配对中,第一个元素的 Val1 一定小于第二个元素的 Val1,完全匹配需求。500行数据的场景下总共会生成 124750 组配对,计算量极低,不会有性能问题。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

