如何重新排列Pandas数据帧?

2024-06-16 11:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从这个Pandas数据框中获取:

     0    1
0  A11  A12
1  A21  A22
2  A31  A32

为此:

^{pr2}$

rX是上一个数据帧中元素的行号(+1)

cX元素的前一列(+1)是前一个帧的编号

这是我试图编写但失败的代码:

# Number of samples and features
n_samples = len(df)
n_features = len(df.columns)

data = pd.DataFrame([[s for s in range(1, n_samples+1)],
                    [m for m in range(1, n_features+1)],
                    [something in here]])

我真的在列表理解/函数式编程上苦苦挣扎。提前谢谢!在


Tags: 数据in元素pandasdfforlenrange
3条回答

尝试stack+reset_index

df_new = df.stack().reset_index()
df_new[["level_0", "level_1"]] = df_new[["level_0", "level_1"]].astype(int) + 1
df_new

    level_0 level_1 0
0   1       1       A11
1   1       2       A12
2   2       1       A21
3   2       2       A22
4   3       1       A31
5   3       2       A32

df.stack()给出了一个多索引序列

^{pr2}$

使用pd.DataFrame.rename和{}
我还使用了python3.6f-strings
否则,请使用str.format

df.rename(
    index=lambda x: f'r{int(x)+1}',
    columns=lambda x: f'c{int(x)+1}'
).stack().reset_index().set_axis([0, 1, 2], axis=1, inplace=False)

    0   1    2
0  r1  c1  A11
1  r1  c2  A12
2  r2  c1  A21
3  r2  c2  A22
4  r3  c1  A31
5  r3  c2  A32

或者是纯理解的版本

^{pr2}$

或者类似的

^{3}$

您可以先重命名列和索引,然后堆叠列并重置索引。在

(
    df.rename(columns=lambda x: 'c{}'.format(int(x)+1))
    .rename(index=lambda x: 'r{}'.format(int(x)+1))
    .stack()
    .reset_index()
    .set_axis([0,1,2], axis=1, inplace=False)
)
Out[39]: 
    0   1    2
0  r1  c1  A11
1  r1  c2  A12
2  r2  c1  A21
3  r2  c2  A22
4  r3  c1  A31
5  r3  c2  A32

相关问题 更多 >