每前n行重复m次

时间:2020-08-07 18:41:18

标签: python pandas dataframe repeat

这是一个非常简单的问题,我在徘徊是否有一种简单的技术,如果可能的话不使用循环,它必须已经在某个地方回答了,但是我找不到它。 我有一个1014行的数据帧,我想做的是重复前6行n次,然后在前6行之后重复6行n次,同样地每6行重复一次

假设一个简单的例子

import pandas as pd
df = pd.DataFrame({'X': [1,2,9,2,3,1,2,4], 
                   'Y': [6,7,8,9,0,4,6,7]})  


让每两行重复3次。 (示例前2行和后2行重复3次) 所以我想得到的是

import pandas as pd
df = pd.DataFrame({'X': [1,2,1,2,1,2,9,2,9,2,9,2], 
                   'Y': [6,7,6,7,6,7,8,9,8,9,8,9]})  


2 个答案:

答案 0 :(得分:0)

如果您需要重复某些数据行,那么在您的应用程序中需要的地方重复这样做会更好吗?

对于它的价值,以下内容在数据框的第二个位置重复了两行。

您可以创建一个循环,每n行重复一次此过程。

import pandas as pd
df = pd.DataFrame({'X': [1,2,9,2,3,1,2,4], 
                   'Y': [6,7,8,9,0,4,6,7]}) 

print(pandasql.sqldf("select * from df", locals()))

df = pd.concat([df.iloc[:2], df[1:3], df.iloc[2:]]).reset_index(drop=True)

print(pandasql.sqldf("select * from df", locals()))

答案 1 :(得分:0)

这是一种通过分组复制的方式:

# create group id
df['grp'] = df.groupby(df.index % 2).cumcount()

# duplicate group
df = (df
      .query("grp <= 1") # take first two groups
      .groupby('grp', as_index=False)
      .apply(lambda x: x.append(x)) # duplicate group
      .reset_index(drop=True)
      .drop("grp", axis=1))

print(df)

   X  Y
0  1  6
1  2  7
2  1  6
3  2  7
4  9  8
5  2  9
6  9  8
7  2  9