【问题标题】:Multiply two panda dataframes together to repeat data a certain amount of times [duplicate]将两个熊猫数据框相乘以重复数据一定次数[重复]
【发布时间】:2018-01-12 18:59:14
【问题描述】:

假设我有两个数据框,它们看起来像这样:

1/31
2/28
3/31

和:

black    dog
white    dog
orange   cat

我希望我的结果数据框是这样的:

1/31   black   dog
1/31   white   dog
1/31   orange  cat
2/28   black   dog
2/28   white   dog
2/28   orange  cat
3/31   black   dog
3/31   white   dog
3/31   orange  cat

有没有简单的矩阵乘法来将这两个熊猫数据框相乘?我不熟悉这样做的语法,如果可以的话,我想尽可能避免合并/forloops。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    一种方法是使用pd.merge

    df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1)
    

    输出:

        0_x     0_y    1
    0  1/31   black  dog
    1  1/31   white  dog
    2  1/31  orange  cat
    3  2/28   black  dog
    4  2/28   white  dog
    5  2/28  orange  cat
    6  3/31   black  dog
    7  3/31   white  dog
    8  3/31  orange  cat
    

    【讨论】:

      【解决方案2】:

      故意令人讨厌,但速度惊人:

      from itertools import starmap as smp, product as xp
      pd.concat(
          smp(
              lambda x, i: x.iloc[i].reset_index(drop=True),
              (lambda y: zip(y, map(list, zip(*xp(*map(range, map(len, y)))))))([d1, d2])
          ), axis=1
      )
      
         col1   color animal
      0  1/31   black    dog
      1  1/31   white    dog
      2  1/31  orange    cat
      3  2/28   black    dog
      4  2/28   white    dog
      5  2/28  orange    cat
      6  3/31   black    dog
      7  3/31   white    dog
      8  3/31  orange    cat
      

      设置

      d1 = pd.DataFrame(dict(col1=['1/31', '2/28', '3/31']))
      
      d2 = pd.DataFrame(OrderedDict(
          color=['black', 'white', 'orange'],
          animal=['dog', 'dog', 'cat']
      ))
      

      【讨论】:

        猜你喜欢
        • 2012-10-21
        • 2018-01-24
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        相关资源
        最近更新 更多