cartesian product in pandas

前端 未结 11 1993
再見小時候
再見小時候 2020-11-21 23:35

I have two pandas dataframes:

from pandas import DataFrame
df1 = DataFrame({\'col1\':[1,2],\'col2\':[3,4]})
df2 = DataFrame({\'col3\':[5,6]})     

11条回答
  •  耶瑟儿~
    2020-11-22 00:16

    Here is a helper function to perform a simple Cartesian product with two data frames. The internal logic handles using an internal key, and avoids mangling any columns that happen to be named "key" from either side.

    import pandas as pd
    
    def cartesian(df1, df2):
        """Determine Cartesian product of two data frames."""
        key = 'key'
        while key in df1.columns or key in df2.columns:
            key = '_' + key
        key_d = {key: 0}
        return pd.merge(
            df1.assign(**key_d), df2.assign(**key_d), on=key).drop(key, axis=1)
    
    # Two data frames, where the first happens to have a 'key' column
    df1 = pd.DataFrame({'number':[1, 2], 'key':[3, 4]})
    df2 = pd.DataFrame({'digit': [5, 6]})
    cartesian(df1, df2)
    

    shows:

       number  key  digit
    0       1    3      5
    1       1    3      6
    2       2    4      5
    3       2    4      6
    

提交回复
热议问题