gpt4 book ai didi

python - Pandas 矢量化方式生成一组行与所有其他行的成对组合

转载 作者:行者123 更新时间:2023-12-03 18:48:51 24 4
gpt4 key购买 nike

有没有pandas生成所有成对行组合的特定子集的矢量化方式如下:给定不同的行组,我想将组中的每一行与所有其他行配对(即,组外行和组内行)。因此,如果整个集合的长度为 n和长度组 k, k << n然后我正在寻找矢量化的 O(nk)解决方案。

例如,假设我们有以下数据框

   CarMaker Model  HorsePower  TopSpeed
0 Audi S3 100 200
1 Audi S5 110 210
2 BMW M3 120 220
3 BMW M4 130 230
4 Mercedes GLS 140 240
5 Mercedes AMG 150 250

来自易于复制的代码段

input_df = pd.DataFrame({
"CarMaker": ["Audi", "Audi", "BMW", "BMW", "Mercedes", "Mercedes" ],
"Model": ["S3", "S5", "M3", "M4", "GLS", "AMG"],
"HorsePower": [100, 110, 120, 130, 140, 150],
"TopSpeed": [200, 210, 220, 230, 240, 250]
})

尊贵的群体是奥迪汽车,我想将所有奥迪车型与所有其他行配对以获得

  CarMaker_main Model_main CarMaker_other Model_other  HP_main  HP_other  TopSpeed_main  TopSpeed_other

0 Audi S3 Audi S5 100 110 200 210
1 Audi S3 BMW M3 100 120 200 220
2 Audi S3 BMW M4 100 130 200 230
3 Audi S3 Mercedes GLS 100 140 200 240
4 Audi S3 Mercedes AMG 100 150 200 250
5 Audi S5 BMW M3 110 120 210 220
6 Audi S5 BMW M4 110 130 210 230
7 Audi S5 Mercedes GLS 110 140 210 240
8 Audi S5 Mercedes AMG 110 150 210 250

最佳答案

如果您不介意将模型与自身进行比较,则可以使用合并。

import pandas as pd

input_df = pd.DataFrame({
"CarMaker": ["Audi", "Audi", "BMW", "BMW", "Mercedes", "Mercedes" ],
"Model": ["S3", "S5", "M3", "M4", "GLS", "AMG"],
"HorsePower": [100, 110, 120, 130, 140, 150],
"TopSpeed": [200, 210, 220, 230, 240, 250]
})

df_main = input_df[input_df["CarMaker"]=="Audi"].copy()
df_other = input_df.copy()

df_main["key"] = 0
df_other["key"] = 0

pd.merge(df_main, df_other, how="outer", on="key", suffixes=("_main", "_other")).drop("key", axis=1).sort_index(axis=1)

如果你有 pandas > 1.2,你可以跳过“关键”恶作剧,只需将 how="cross"传递给 pandas merge

pd.merge(df_main, df_other, how="cross", suffixes=("_main", "_other")).sort_index(axis=1)

关于python - Pandas 矢量化方式生成一组行与所有其他行的成对组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67270695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com