试图将pandas数据帧中的每一行复制一定次数

时间:2018-03-24 16:22:51

标签: python r dataframe

示例数据:

X  | a | c
41 | 5 | 2
54 | 3 | 1

转型:

X  | a | c
41 | 5 | 2
41 | 5 | 2
41 | 5 | 2
41 | 5 | 2
41 | 5 | 2
41 | 5 | 2
41 | 5 | 2
54 | 3 | 1
54 | 3 | 1
54 | 3 | 1
54 | 3 | 1
54 | 3 | 1
54 | 3 | 1
54 | 3 | 1

我使用以下命令在R中完成了此操作:

data_final[rep(1:nrow(data_final),each=nrow(expand.grid(0:6)),]

但是我不太确定我在python中是怎么做的。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:3)

带有numpy.repeat的pandas + numpy解决方案:

如果所有列都具有相同的dtypes:

df = pd.DataFrame(np.repeat(df.values, 7, axis=0), columns=df.columns)
print (df)
     X  a  c
0   41  5  2
1   41  5  2
2   41  5  2
3   41  5  2
4   41  5  2
5   41  5  2
6   41  5  2
7   54  3  1
8   54  3  1
9   54  3  1
10  54  3  1
11  54  3  1
12  54  3  1
13  54  3  1

如果不是:

df = df.loc[np.repeat(df.index, 7)].reset_index(drop=True)
print (df)
     X  a  c  d
0   41  5  2  a
1   41  5  2  a
2   41  5  2  a
3   41  5  2  a
4   41  5  2  a
5   41  5  2  a
6   41  5  2  a
7   54  3  1  r
8   54  3  1  r
9   54  3  1  r
10  54  3  1  r
11  54  3  1  r
12  54  3  1  r
13  54  3  1  r

答案 1 :(得分:1)

我们可以尝试

pd.concat([dat]*6, ignore_index = True).sort_values('X').reset_index(drop = True)
#     X  a  c
#0   41  5  2
#1   41  5  2
#2   41  5  2
#3   41  5  2
#4   41  5  2
#5   41  5  2
#6   54  3  1
#7   54  3  1
#8   54  3  1
#9   54  3  1
#10  54  3  1
#11  54  3  1

答案 2 :(得分:0)

这可以通过在索引上使用.repeat,将结果数组传递给.reindex,然后使用drop=True重置索引来完成:

df.reindex(df.index.repeat(6)).reset_index(drop=True)

#      X  a  c
# 0   41  5  2
# 1   41  5  2
# 2   41  5  2
# 3   41  5  2
# 4   41  5  2
# 5   41  5  2
# 6   54  3  1
# 7   54  3  1
# 8   54  3  1
# 9   54  3  1
# 10  54  3  1
# 11  54  3  1