向DataFrame中添加重复行

3

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

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个回答

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

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

还可以尝试使用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

2
这个应该很快:-) - BENY
1
@AlterNative 在这里,我传入了 id 来指定我想通过此标签检测重复项。默认情况下,drop_duplicates 只会保留第一行。 - Tai
1
@AlterNative 你只有几个选择可以选择。请参见此处keep参数。 - Tai
1
@AlterNative,你想要做哪些潜在的选择?如果太复杂了,我认为你可以自己创建一个新的df,并在idABC之间进行适当的映射,然后稍后再使用merge函数。 - Tai
@Tai,我有一个很大的数据集,对于一些行,我想复制第一行,而对于另一些行,我想复制第二行,以此类推。我是pandas的新手,我认为我需要学习映射和合并主题才能更好地理解它们。 - Elham
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接