假设DataFrame如下:
A B C D E F
0 d1 10 d11 10 d21 10
1 d2 30 d12 30 d22 30
2 d3 40 d13 40 d23 40
3 d4 105 d14 105 d24 105
4 d5 10 d15 10 d25 10
5 d6 30 d16 30 d26 30
6 d7 40 d17 40 d27 40
7 d8 10 d18 10 d28 10
8 d9 5 d19 5 d29 5
9 d10 10 d20 10 d30 10
如何将所有描述合并到与相应值关联的单个列中?
description value
0 d1 10
1 d2 30
2 d3 40
3 d4 105
4 d5 10
5 d6 30
6 d7 40
7 d8 10
8 d9 5
9 d10 10
10 d11 10
11 d12 30
12 d13 40
13 d14 105
14 d15 10
15 d16 30
16 d17 40
17 d18 10
18 d19 5
19 d20 10
20 d21 10
21 d22 30
22 d23 40
23 d24 105
24 d25 10
25 d26 30
26 d27 40
27 d28 10
28 d29 5
29 d30 10
请注意,原始数据帧的某些描述可能包含空值和描述
我试过了
pd.melt( id_vars=['A','C','E'], value_vars=['B','D','F'])
但是它没有得到我想要的结果
发布于 2017-11-10 16:11:30
iloc
可以先选择成对和解对列,values
可以创建numpy数组,ravel
可以转置和扁平化
a = df.iloc[:, ::2].values.T.ravel()
b = df.iloc[:, 1::2].values.T.ravel()
或者,如果需要按列名选择值:
a = df[['A','C','E']].values.T.ravel()
b = df[['B','D','F']].values.T.ravel()
最后使用DataFrame
构造函数:
df = pd.DataFrame({'description': a, 'value':b})
print (df.head(10))
description value
0 d1 10
1 d2 30
2 d3 40
3 d4 105
4 d5 10
5 d6 30
6 d7 40
7 d8 10
8 d9 5
9 d10 10
发布于 2017-11-10 16:21:45
请注意,这项工作适用于您的样本数据。
pd.DataFrame({'v1':sum(df.select_dtypes(include=['object']).values.tolist(),[]),
'v2':sum(df.select_dtypes(exclude=['object']).values.tolist(),[])})
Out[255]:
v1 v2
0 d1 10
1 d11 10
2 d21 10
3 d2 30
4 d12 30
5 d22 30
6 d3 40
7 d13 40
8 d23 40
9 d4 105
发布于 2017-11-10 17:32:42
尝试使用concat
df_new = pd.DataFrame()
df_new['description']= pd.concat([df['A'], df['C'], df['E']], ignore_index=True)
df_new['value']= pd.concat([df['B'], df['D'], df['F']], ignore_index=True)
description value
0 d1 10
1 d2 30
2 d3 40
3 d4 105
4 d5 10
5 d6 30
6 d7 40
7 d8 10
8 d9 5
9 d10 10
10 d11 10
11 d12 30
12 d13 40
13 d14 105
14 d15 10
15 d16 30
16 d17 40
17 d18 10
18 d19 5
19 d20 10
20 d21 10
21 d22 30
22 d23 40
23 d24 105
24 d25 10
25 d26 30
26 d27 40
27 d28 10
28 d29 5
29 d30 10
https://stackoverflow.com/questions/47226867
复制相似问题