将重复行添加到DataFrame

时间:2018-01-29 01:22:09

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

我没弄清楚如何解决以下问题! 考虑以下数据集:

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)

3 个答案:

答案 0 :(得分:6)

使用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

答案 1 :(得分:3)

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 :(得分: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