示例数据:
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中是怎么做的。
非常感谢任何帮助
答案 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