【问题标题】:Is there a pandas function to duplicate each row of a dataframe n times, assigning each of n categories to each row?是否有一个 pandas 函数可以将数据帧的每一行复制 n 次,将 n 个类别中的每一个分配给每一行?
【发布时间】:2022-12-22 00:45:07
【问题描述】:

最简单的方法是什么:

df = pd.DataFrame({'col1': [1,1,2,3], 'col2': [2,4,3,5]})
group_l = ['a', 'b']
df

    col1    col2
0   1   2
1   1   4
2   2   3
3   3   5

    col1    col2    group
0   1   2   a
1   1   4   a
2   2   3   a
3   3   5   a
0   1   2   b
1   1   4   b
2   2   3   b
3   3   5   b

我想到了一些解决方案,但似乎都不是很好。

  • 使用 pd.MultiIndex.from_product,然后重置索引。如果初始 DataFrame 只有一列,这会很好地工作。
  • 添加一个新列group,其中每个元素都是['a', 'b']。使用 pd.DataFrame.explode。感觉效率低下。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以创建副本,相应地设置组值并连接它们,即

    import pandas as pd
    df = pd.DataFrame({'col1': [1,1,2,3], 'col2': [2,4,3,5]})
    df1 = df.copy()
    df2 = df.copy()
    df1['group'] = 'A'
    df2['group'] = 'B'
    df_out = pd.concat([df1,df2])
    print(df_out)
    

    给出输出

       col1  col2 group
    0     1     2     A
    1     1     4     A
    2     2     3     A
    3     3     5     A
    0     1     2     B
    1     1     4     B
    2     2     3     B
    3     3     5     B
    

    【讨论】:

      【解决方案2】:

      一种方法,使用pd.concat

      group_l = ['a', 'b']
      res = pd.concat([df.assign(group=e) for e in group_l], axis=0)
      print(res)
      

      输出

         col1  col2 group
      0     1     2     a
      1     1     4     a
      2     2     3     a
      3     3     5     a
      0     1     2     b
      1     1     4     b
      2     2     3     b
      3     3     5     b
      

      【讨论】:

        猜你喜欢
        • 2015-05-25
        • 2020-05-17
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        相关资源
        最近更新 更多