首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从行创建表

从行创建表
EN

Stack Overflow用户
提问于 2019-07-23 10:27:14
回答 1查看 216关注 0票数 1

this question相关,我一直试图使用melt,但没有成功。

我有一个1行的DataFrame,如下所示:

代码语言:javascript
复制
   A   B   C   total   date   A_size   B_size   C_size   total_size
0  4   2   5    11 2019-01-01  123      456      789        1368

我想把它变成这样(现在我不再关心date了):

代码语言:javascript
复制
      Values     Sizes
A        4        123
B        2        456
C        5        789
total    11       1368

我有一些非常讨厌的东西做这项工作,但它不灵活。我希望能够添加DD_size,而不必修改下游代码。

黑客代码:

代码语言:javascript
复制
def format_table(todays_metadata: pd.DataFrame):
    todays_metadata_reformat = todays_metadata.loc[:, 'A':'total'] # hardcoded 'A'
    todays_metadata_reformat.index = ['Values']
    sizes = todays_metadata.loc[:, 'A_size':'total_size'] # hardcoded 'A_size'
    sizes.index = ['Sizes']
    sizes.columns = todays_metadata_reformat.columns
    todays_metadata_reformat = 
    todays_metadata_reformat.append(sizes).transpose()
    return todays_metadata_reformat
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-23 10:42:48

您可以通过total检查pd.Index.get_loc列的位置索引,并创建切片:

代码语言:javascript
复制
df1=df.drop('date',1)
i=df1.columns[:df1.columns.get_loc('total')+1] # ['A', 'B', 'C', 'total']
j=df1.columns[df1.columns.get_loc('total')+1:] #['A_size','B_size','C_size','total_size']

然后融化和碰撞:

代码语言:javascript
复制
m=df1[j].melt(value_name='size')
m.index=m.pop('variable').str.split('_').str[0]
pd.concat([df1[i].melt().set_index('variable'),m],axis=1)

编辑:

另一种使用df.filter()的方法

代码语言:javascript
复制
df1=df.drop('date',1)
m=df.filter(like='size')
代码语言:javascript
复制
x=df1[df1.columns.difference(m.columns,sort=False)].melt().set_index('variable')
y=m.rename(columns=lambda x: x.split('_')[0]).melt(value_name='Sizes').set_index('variable')
print(pd.concat([x,y],axis=1))
代码语言:javascript
复制
           value  Sizes
variable              
A             4    123
B             2    456
C             5    789
total        11   1368
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57162024

复制
相关文章

相似问题

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