当前位置: 首页 > 知识库问答 >
问题:

Python:如何重复数据框中1到n行的每个组合?

东方文林
2023-03-14

已获得如下所示的数据帧df:

Store   Aisle   Table
11      59      2
11      61      3

需要将行的每个组合展开3次,生成新的列“位”,范围值如下:

Store   Aisle   Table   Bit
11      59      2       1
11      59      2       2
11      59      2       3
11      61      3       1
11      61      3       2
11      61      3       3

尝试了以下代码,但没有成功。

df.loc[df.index.repeat(range(3))]

帮帮我!提前谢谢。

共有3个答案

符懿轩
2023-03-14

我发现直接使用concat可以:

new = pd.concat([df]*3).sort_index().reset_index(drop=True)

>>> print(new)

   Store  Aisle  Table
0     11     59      2
1     11     59      2
2     11     59      2
3     11     61      3
4     11     61      3
5     11     61      3

然后,您可以稍后添加值为1 2 3的新列,因为情况总是这样(从这里开始):

new['Bit'] =  np.r_[:len(new)] % 3 + 1
荣曾笑
2023-03-14
df = df.iloc[np.repeat(np.arange(len(df)), 3)]
df['Bit'] = list(range(1, len(df)//3+1))*3
斜博超
2023-03-14

您应该提供一个数字,而不是一个重复的范围。此外,您还需要一点处理:

(df.loc[df.index.repeat(3)]
   .assign(Bit=lambda d: d.groupby(level=0).cumcount().add(1))
   .reset_index(drop=True)
)

输出:

   Store  Aisle  Table  Bit
0     11     59      2    1
1     11     59      2    2
2     11     59      2    3
3     11     61      3    1
4     11     61      3    2
5     11     61      3    3

或者,使用多索引。从\u product

idx = pd.MultiIndex.from_product([df.index, range(1,3+1)], names=(None, 'Bit'))
(df.reindex(idx.get_level_values(0))
   .assign(Bit=idx.get_level_values(1))
)
 类似资料:
  • 我的任务是突出显示熊猫数据框中的所有电子邮件副本。是否有一个函数用于此操作,或者有一种方法可以删除所有非重复项,从而为我留下一个很好的列表,列出数据集中的所有重复项? 该表由六列组成: 我想摆脱最后一列,因为最后一封邮件不是重复的。

  • 我是sqlite3的新手。我通过python在SQLite中导入了一个导出的CSV文件,其中列出了来自Splunk的IP地址,我计划在每次识别类似的IP地址时增加数据库中的count列。 我的想法是使用SQLite CASE语句,留档,更新语句等。 也试过, 我知道我错了,我好几天都搞不清楚这个问题。下面是我的sqlite3数据库在cmd提示符中的样子: 我会继续寻找解决方案。感谢您的反馈!

  • 我有一个数据框 我只想保留唯一的索引,因为索引1是重复的,我想删除它的第二个实例,我该怎么做?我想要我的结果

  • 问题内容: 我想每0.5秒触发一次功能,并且能够启动,停止和重置计时器。我不太了解Python线程的工作方式,并且在使用python计时器时遇到了困难。 但是,当我执行两次时,我会不断得到帮助。有没有解决的办法?我尝试在每次开始之前申请。 伪代码: 问题答案: 最好的方法是一次启动计时器线程。在计时器线程中,你需要编写以下代码 然后,在启动计时器的代码中,可以停止事件来停止计时器。

  • 问题内容: 这是我的数据框,应重复5次: 我想要这样的结果: 但是必须有一种比保持追加更聪明的方法。实际上,Im正在处理的数据帧应重复50次。 我还没有发现任何实用的东西,包括类似-—的东西,但它在数据框架上不起作用。 有人可以帮忙吗? 问题答案: 您可以使用以下功能: 如果只想重复值而不是索引,则可以执行以下操作:

  • 问题内容: 我有一个这样的数据框: 我要 然后然后为每个pidx 然后是每个组的前2名。 我正在寻找的结果是这样的: 我试过的是: 这似乎可行,但我不知道如果处理庞大的数据集,这是否是正确的方法。我还能使用什么其他最佳方法来获得这种结果? 问题答案: 有两种解决方案: 1.和合计: 2.和合计: 时间 :