[英]stacking columns from pandas dataframe
抱歉,如果以其他方式提出了此要求,我不确定该如何用其他语言表达自己的想法。
假设我有一些带有两列值的数据框:
import pandas as pd
data = {'col1':[0.6, 0.8, 0.9, 0.87, 0.69, 0.88],
'col2':[0.72, 0.91, 0.83, 0.85, 0.96, 0.76]}
df = pd.DataFrame(data)
df
Out[1]:
col1 col2
0 0.60 0.72
1 0.80 0.91
2 0.90 0.83
3 0.87 0.85
4 0.69 0.96
5 0.88 0.76
我想将第2列放在第1列下方,并将其“追加”到第6列到第11列。我还希望创建一个新的“ identifier”列,使其具有每个数据点所属的列名。 没有大量意大利面条代码的情况下,我能得到的最接近的结果是:
pd.DataFrame(df.stack()).reset_index()
Out[34]:
level_0 level_1 0
0 0 col1 0.60
1 0 col2 0.72
2 1 col1 0.80
3 1 col2 0.91
4 2 col1 0.90
5 2 col2 0.83
6 3 col1 0.87
7 3 col2 0.85
8 4 col1 0.69
9 4 col2 0.96
10 5 col1 0.88
11 5 col2 0.76
我不希望将其标记为“ level_0”,“ level_1”等,因为我想记住要使用的列名。
我敢肯定有一种简单而专业的方法可以完成此任务,但是我对此并不了解。
您真的很亲密,不必调用DataFrame
构造函数。
对于设置的列名称,还可以通过rename_axis
重命名MultiIndex
rename_axis
:
df = df.stack().rename_axis(('a', 'b')).reset_index(name='val')
print (df)
a b val
0 0 col1 0.60
1 0 col2 0.72
2 1 col1 0.80
3 1 col2 0.91
4 2 col1 0.90
5 2 col2 0.83
6 3 col1 0.87
7 3 col2 0.85
8 4 col1 0.69
9 4 col2 0.96
10 5 col1 0.88
11 5 col2 0.76
脾气暴躁的选择:
a = np.repeat(df.index, len(df.columns))
b = np.tile(df.columns, len(df.index))
c = df.values.ravel()
df = pd.DataFrame(np.column_stack([a,b,c]), columns=['a','b','c'])
print (df)
a b c
0 0 col1 0.6
1 0 col2 0.72
2 1 col1 0.8
3 1 col2 0.91
4 2 col1 0.9
5 2 col2 0.83
6 3 col1 0.87
7 3 col2 0.85
8 4 col1 0.69
9 4 col2 0.96
10 5 col1 0.88
11 5 col2 0.76
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.