如何从此Pandas数据框中获取信息:

     0    1
0  A11  A12
1  A21  A22
2  A31  A32


对此:

    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


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]])


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

最佳答案

使用pd.DataFrame.renamepd.DataFrame.stack
我还自由使用了Python 3.6 f字符串
否则,使用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




或纯粹的理解版本

pd.DataFrame([
    (f'r{i+1}', f'c{j+1}', v)
    for i, r in enumerate(df.values)
    for j, v in enumerate(r)
])

    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




或类似

v = df.values
n, m = v.shape

pd.DataFrame([
    (f'r{i+1}', f'c{j+1}', v[i, j])
    for i in range(n) for j in range(m)
])

    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

10-08 09:31
查看更多