【问题标题】:Cartesian Product on Pandas GroupbyPandas Groupby 上的笛卡尔积
【发布时间】:2018-09-16 07:18:06
【问题描述】:

我有一个数据框

df:

col1    col2    col3
JHGK    B       name1
JHGK    B       name2
JHGK    C       name3
OPDR    B       name4
ERTH    B       name5
ERTH    C       name6

在 col1 上进行 groupby 后,我想在(col2 = B 的不同 col3 值和 col2 = C 的不同 col3 值)之间进行笛卡尔积

结果数据框:

最终:

col1   n1     n2
JHGK   name1  name3
JHGK   name2  name3
ERTH   name5  name6

【问题讨论】:

    标签: python pandas-groupby cartesian-product


    【解决方案1】:

    col2 是B 的地方获取df 的子集,在col2 是C 的地方获取df 的子集。然后在col1 上进行连接,删除一些额外的列,然后重命名。 :)

    >>> import pandas as pd
    >>> df = pd.DataFrame({'col1': ['JHGK','JHGK','JHGK','OPDR','ERTH','ERTH'], 'col2': ['B','B','C','B','B','C'], 'col3': ['name1','name2','name3','name4','name5','name6']})
    >>> df
       col1 col2   col3
    0  JHGK    B  name1
    1  JHGK    B  name2
    2  JHGK    C  name3
    3  OPDR    B  name4
    4  ERTH    B  name5
    5  ERTH    C  name6
    >>> df_joined = df[df['col2'] == 'B'].merge(df[df['col2'] == 'C'], on='col1').drop(['col2_x', 'col2_y'], axis=1).rename(columns={'col3_x': 'n1', 'col3_y': 'n2'})
    >>> df_joined
       col1     n1     n2
    0  JHGK  name1  name3
    1  JHGK  name2  name3
    2  ERTH  name5  name6
    

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多