Python Pandas矢量化了一种生成组行与所有其他行的成对组合的方法
是否有一种Python Pandas矢量化了一种生成组行与所有其他行的成对组合的方法,python,pandas,Python,Pandas,是否有一种pandas矢量化的方法来生成所有成对行组合的特定子集,如下所示:给定一组可分辨的行,我想将组中的每一行与所有其他行(即,组外行和组内行)配对。因此,如果整个集合的长度n,而长度k的组,k如果您不介意将模型与自身进行比较,则可以使用merge import pandas as pd input_df = pd.DataFrame({ "CarMaker": ["Audi", "Audi", "BMW&quo
pandas
矢量化的方法来生成所有成对行组合的特定子集,如下所示:给定一组可分辨的行,我想将组中的每一行与所有其他行(即,组外行和组内行)配对。因此,如果整个集合的长度n
,而长度k的组,k如果您不介意将模型与自身进行比较,则可以使用merge
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)
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)
pd.merge(df_main, df_other, how="cross", suffixes=("_main", "_other")).sort_index(axis=1)