首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将多个索引展平到单个列中

将多个索引展平到单个列中
EN

Stack Overflow用户
提问于 2017-11-10 16:07:27
回答 4查看 61关注 0票数 2

假设DataFrame如下:

代码语言:javascript
运行
AI代码解释
复制
     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

如何将所有描述合并到与相应值关联的单个列中?

代码语言:javascript
运行
AI代码解释
复制
   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

请注意,原始数据帧的某些描述可能包含空值和描述

我试过了

代码语言:javascript
运行
AI代码解释
复制
pd.melt( id_vars=['A','C','E'], value_vars=['B','D','F'])

但是它没有得到我想要的结果

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-10 16:11:30

iloc可以先选择成对和解对列,values可以创建numpy数组,ravel可以转置和扁平化

代码语言:javascript
运行
AI代码解释
复制
a = df.iloc[:, ::2].values.T.ravel()
b = df.iloc[:, 1::2].values.T.ravel()

或者,如果需要按列名选择值:

代码语言:javascript
运行
AI代码解释
复制
a = df[['A','C','E']].values.T.ravel()
b = df[['B','D','F']].values.T.ravel()

最后使用DataFrame构造函数:

代码语言:javascript
运行
AI代码解释
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-11-10 16:21:45

请注意,这项工作适用于您的样本数据。

代码语言:javascript
运行
AI代码解释
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-11-10 17:32:42

尝试使用concat

代码语言:javascript
运行
AI代码解释
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47226867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档