【问题标题】:Adding duplicate rows to a DataFrame将重复行添加到 DataFrame
【发布时间】:2018-07-07 16:07:42
【问题描述】:

我不知道如何解决以下问题! 考虑以下数据集:

df = pd.DataFrame(data=np.array([['a',1, 2, 3], ['a',4, 5, 6],
                                 ['b',7, 8, 9], ['b',10, 11 , 12]]),
 columns=['id','A', 'B', 'C'])

  id   A    B    C
  a    1    2    3
  a    4    5    6
  b    7    8    9
  b    10   11   12

我需要按 id 对数据进行分组,并在每个组中复制第一行并将其添加到数据集中,如下面的数据集:

  id   A    B    C    A  B  C
  a    1    2    3    1  2  3
  a    4    5    6    1  2  3
  b    7    8    9    7  8  9
  b    10   11   12   7  8  9

非常感谢您的帮助。

我做了以下步骤,但是我无法展开它:

df1 = df.loc [0:0 , 'A' :'C']
df3 = pd.concat([df,df1],axis=1)

【问题讨论】:

    标签: python pandas group-by duplicates pandas-groupby


    【解决方案1】:

    cumcount + where+ffill

    v=df.groupby('id').cumcount()==0
    
    pd.concat([df,df.iloc[:,1:].where(v).ffill()],1)
    Out[57]: 
      id   A   B   C  A  B  C
    0  a   1   2   3  1  2  3
    1  a   4   5   6  1  2  3
    2  b   7   8   9  7  8  9
    3  b  10  11  12  7  8  9
    

    【讨论】:

      【解决方案2】:

      也可以试试drop_duplicatesmerge

      df_unique = df.drop_duplicates("id")
      df.merge(df_unique, on="id", how="left")
      
          id  A_x     B_x     C_x     A_y     B_y     C_y
      0   a   1       2       3       1       2       3
      1   a   4       5       6       1       2       3
      2   b   7       8       9       7       8       9
      3   b   10      11      12      7       8       9
      

      【讨论】:

      • 这个应该很快:-)
      • 感谢所有回复。我想知道是否需要复制第二行,我可以再次使用这个解决方案吗?为什么 drop_duplicate 删除第二列?有什么方法可以通过 drop_duplicate 删除选定的行! @Tai
      • @AlterNative 这里我传入了id 来指定我想通过这个标签来检测重复。默认情况下,drop_duplicates 只会保留第一行
      • @AlterNative 您只有几个选项可供选择。有关keep 参数,请参见Here
      • @AlterNative 你想做哪些潜在的选择?如果太复杂,我认为您可以自己创建一个新的 df,并在 idABC 之间使用合适的映射,然后稍后使用该 df 执行 merge
      【解决方案3】:

      使用groupby + first,然后将df 与此结果连接:

      v = df.groupby('id').transform('first')
      pd.concat([df, v], 1)
      
        id   A   B   C  A  B  C
      0  a   1   2   3  1  2  3
      1  a   4   5   6  1  2  3
      2  b   7   8   9  7  8  9
      3  b  10  11  12  7  8  9
      

      【讨论】:

        猜你喜欢
        • 2019-01-28
        • 2021-11-25
        • 1970-01-01
        • 2021-08-13
        • 2018-11-29
        • 2018-06-10
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多