Python:如何重复Dataframe中从1到n的每行组合?
Python: How to repeat each combination of rows in Dataframe ranging 1 to n?
有如下数据框 df:
Store Aisle Table
11 59 2
11 61 3
需要将行的每个组合扩展 3 次以生成新列 'bit',范围值如下:
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))]
帮帮我!提前致谢。
您应该提供一个数字,而不是 repeat
的范围。另外,你需要一些处理:
(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
或者,使用 MultiIndex.from_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))
)
df = df.iloc[np.repeat(np.arange(len(df)), 3)]
df['Bit'] = list(range(1, len(df)//3+1))*3
有如下数据框 df:
Store Aisle Table
11 59 2
11 61 3
需要将行的每个组合扩展 3 次以生成新列 'bit',范围值如下:
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))]
帮帮我!提前致谢。
您应该提供一个数字,而不是 repeat
的范围。另外,你需要一些处理:
(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
或者,使用 MultiIndex.from_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))
)
df = df.iloc[np.repeat(np.arange(len(df)), 3)]
df['Bit'] = list(range(1, len(df)//3+1))*3