我有一个数据框。我想将(基本上复制数据帧)乘以固定数量的目标行。
DF:
col1 col2 col3
A1 B1 C1
A13 B13 C13
A27 B27 C27
我想复制这个数据框,以便生成的数据框应该有10行,基本上每行应该乘以3行,第10行可以是三行中的任何一行。
答案 0 :(得分:3)
我认为需要divmod
来重复所有行,并且只重复一次:
N = 10
a, b = divmod(N,len(df))
print (a, b)
3 1
解决方案,如果所有列都具有numpy.repeat
的相同dtypes:
c = np.repeat(df.values, a, axis=0)
d = np.repeat(df.values[-1], b, axis=0)
df = pd.DataFrame(np.vstack((c,d)), columns=df.columns)
print (df)
col1 col2 col3
0 A1 B1 C1
1 A1 B1 C1
2 A1 B1 C1
3 A13 B13 C13
4 A13 B13 C13
5 A13 B13 C13
6 A27 B27 C27
7 A27 B27 C27
8 A27 B27 C27
9 A27 B27 C27
解决方案,如果可能的话,不同的dtypes:
只有concat
的pandas解决方案:
df = pd.concat([df] * a + [df.iloc[[-1]]] * b).sort_values('col1').reset_index(drop=True)
print (df)
col1 col2 col3
0 A1 B1 C1
1 A1 B1 C1
2 A1 B1 C1
3 A13 B13 C13
4 A13 B13 C13
5 A13 B13 C13
6 A27 B27 C27
7 A27 B27 C27
8 A27 B27 C27
9 A27 B27 C27
仅重复索引的解决方案和重复行的loc
:
idx = np.hstack((np.repeat(df.index[:-1], a), np.repeat(df.index[-1], a + b)))
df = df.loc[idx].reset_index(drop=True)