首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何做多列from_tuples?

如何做多列from_tuples?
EN

Stack Overflow用户
提问于 2016-06-15 12:30:21
回答 2查看 21.6K关注 0票数 15

我了解如何使用pd.MultiIndex.from_tuples()来更改以下内容

代码语言:javascript
复制
       Value
(A,a)  1
(B,a)  2
(B,b)  3

转到

代码语言:javascript
复制
                Value
Caps Lower      
A    a          1
B    a          2
B    b          3

但是如何更改表单中的列元组?

代码语言:javascript
复制
       (A, a)  (A, b) (B,a)  (B,b)
index
1      1       2      2      3
2      2       3      3      2
3      3       4      4      1

变成形式

代码语言:javascript
复制
 Caps         A              B
 Lower        a       b      a      b
 index
 1            1       2      2      3
 2            2       3      3      2
 3            3       4      4      1

非常感谢。

编辑:,我有一个元组列标题的原因是,当我将带有单一级别列的DataFrame加入到具有多级列的DataFrame中时,它将多列转换为字符串格式的元组,并将单个级别保留为单个字符串。

编辑2-替代解决方案:,如本文所述,通过一个具有不同列级大小的join出现问题。这意味着多列被简化为字符串的元组。绕过这个问题,在加入之前,我使用df.columns = [('col_level_0','col_level_1','col_level_2')]作为我希望加入的DataFrame。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 12:35:05

使用传入现有列的columns的结果直接分配给pd.MultiIndex.from_tuples

代码语言:javascript
复制
In [186]:
l=[('A', 'a'),  ('A', 'b'), ('B','a'),  ('B','b')]
df = pd.DataFrame(np.random.randn(5,4), columns = l)
df

Out[186]:
     (A, a)    (A, b)    (B, a)    (B, b)
0 -0.876353  0.553742  1.631858 -0.561309
1  0.463058 -0.455014 -0.491336 -1.436059
2  0.337810  0.233624 -0.571749 -2.259763
3  1.073057 -0.475894  0.999643 -0.379743
4  0.441800  0.311202 -0.191552  0.291268

In [187]:    
df.columns = pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower'])
df

Out[187]:
Caps          A                   B          
Lower         a         b         a         b
0     -0.876353  0.553742  1.631858 -0.561309
1      0.463058 -0.455014 -0.491336 -1.436059
2      0.337810  0.233624 -0.571749 -2.259763
3      1.073057 -0.475894  0.999643 -0.379743
4      0.441800  0.311202 -0.191552  0.291268

请注意,您可以向names属性直接分配columns属性,如下所示:

代码语言:javascript
复制
df.columns.names = ['Caps','Lower']

不要与name属性混淆

票数 24
EN

Stack Overflow用户

发布于 2016-06-15 12:37:19

另一种解决方案是使用MultiIndex.from_tuples和参数names

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'Value': [1,2,3]}, index=[('A','a'),('B','a'),('B','b')])
print (df)
        Value
(A, a)      1
(B, a)      2
(B, b)      3

df.index = pd.MultiIndex.from_tuples(df.index, names=['Caps','Lower'])
print (df)
            Value
Caps Lower       
A    a          1
B    a          2
     b          3

同样适用于columns,请参阅Edchum's answer

代码语言:javascript
复制
df.columns= pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower'])
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37835508

复制
相关文章

相似问题

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