3 回答

TA贡献1820条经验 获得超10个赞
使用pd.concat具有GroupBy:
df = df.reset_index(drop=True)
res = pd.concat((pd.DataFrame(df_slice.T.values, columns=df.columns.str[0]) \
for _, df_slice in df.groupby(df.index // 3)), ignore_index=True)
print(res)
A B C
0 1 2 3
1 10 11 12
2 20 21 22
3 11 12 13
4 100 101 102
5 200 201 202
解释
df.reset_index(drop=True)
将数据帧索引重置为常规pd.RangeIndex
,即0, 1, 2, ..., n
。df.groupby(df.index // 3)
将数据帧分组为 3 行的块。我们GroupBy
在生成器理解中迭代这个对象。df_slice.T.values
转置构成切片的 3 行并转换为 NumPy 数组。我们将pd.DataFrame
其提供给以从 NumPy 数组构造数据帧。pd.concat
获取可迭代的数据帧并将它们组合起来以构建单个数据帧。

TA贡献1876条经验 获得超6个赞
使用groupby, stack& 的另一种选择unstack
df1 = df_given.assign(g=df_given.groupby(level=0).cumcount()).set_index('g',append=True)
df1 = df1.stack().unstack(0).reset_index(drop=True)
df1.columns = df_given.columns
print (df1)
A1 B1 C1
0 1 2 3
1 10 11 12
2 20 21 22
3 11 12 13
4 100 101 102
5 200 201 202
添加回答
举报