将pandas数据帧乘以固定数量的行

时间:2018-03-26 08:44:23

标签: python pandas duplicates

我有一个数据框。我想将(基本上复制数据帧)乘以固定数量的目标行。

DF:

col1    col2    col3
A1      B1      C1
A13     B13     C13
A27     B27     C27

我想复制这个数据框,以便生成的数据框应该有10行,基本上每行应该乘以3行,第10行可以是三行中的任何一行。

1 个答案:

答案 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)