如何从此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.rename
和pd.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