我认为需要divmod 重复所有行并且只重复一个:
N = 10
a, b = divmod(N,len(df))
print (a, b)
3 1
如果所有列都具有与numpy.repeat 相同的dtype 的解决方案:
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 的熊猫解决方案:
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)