【问题标题】:Repeat every first n rows m times每前 n 行重复 m 次
【发布时间】:2020-08-07 18:41:18
【问题描述】:

这是一个非常简单的问题,如果有没有使用循环的简单技术,如果可能的话,我正在徘徊,它必须已经在某个地方得到了回答,但我找不到它。 我有一个 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]})  


【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python pandas dataframe repeat


【解决方案1】:

如果您需要重复某些数据行,在您的应用程序需要它的任何地方这样做不是更好吗?

为了它的价值,下面在第二个位置重复了两行数据框。

您可以创建一个循环,每隔 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()))

【讨论】:

  • 感谢您的洞察力......是的,我有很多数据文件应该完成,所以我已经有很多循环,所以一直在徘徊以避免循环,但再次感谢您的洞察力
【解决方案2】:

这是一种分组复制的方法:

# 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

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2019-08-24
    相关资源
    最近更新 更多