重塑数据框:列到行

我有一个数据框 df_given [n, m] 并且我想将列值更改为每 3 行的行值。


import pandas as pd

df_test1 = pd.DataFrame({'A1': np.arange(1,4), 'B1': np.arange(10, 13), 'C1': np.arange(20, 23)})

df_test2 = pd.DataFrame({'A1': np.arange(11,14), 'B1': np.arange(100, 103), 'C1': np.arange(200, 203)})  

df_given = pd.concat((df_test1, df_test2), axis =0)


df_desired = pd.DataFrame({'A': [1,10,20,11, 100, 200], 'B':[2,11, 21,12, 101, 201], 'C':[3,12,22,13, 102, 202]})

df_desired.head(10)


df_given.head(10)


慕盖茨4494581
浏览 138回答 3
3回答

拉莫斯之舞

使用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    C0    1    2    31   10   11   122   20   21   223   11   12   134  100  101  1025  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 获取可迭代的数据帧并将它们组合起来以构建单个数据帧。

HUX布斯

使用groupby, stack& 的另一种选择unstackdf1 = 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.columnsprint (df1)   A1   B1  C10   1   2   31   10  11  122   20  21  223   11  12  134   100 101 1025   200 201 202
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python