首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将pandas数据帧行转换为多行

如何将pandas数据帧行转换为多行
EN

Stack Overflow用户
提问于 2019-06-26 23:41:07
回答 2查看 1.1K关注 0票数 2

我有一个每个对象一行的pandas数据帧。在该对象中,有一些子对象。我想创建一个每个子对象包含一行的dataframe。

我读过关于melt的东西,但我不知道如何使用它来做我想做的事情。

我想从

代码语言:javascript
复制
ObjectID    Sub1_ID Sub1_Var1   Sub1_Var2   Sub1_Var3   Sub2_ID Sub2_Var1   Sub2_Var2   Sub2_Var3
1           98398   3           10          9           19231           6           7           5
2           87868   8           5           4               
3           4579    5           6           6           24833           6           2           2
4           2514    1           6           9   

代码语言:javascript
复制
ObjectID    Sub_ID  Var1    Var2    Var3
1           98398   3       10      9
1           19231   6       7       5
2           87868   8       5       4
3           4579    5       6       6
3           24833   6       2       2
4           2514    1       6       9
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-26 23:52:50

一种方法是将MultiIndex与from_arrays结合使用,然后使用stack对数据帧进行整形:

代码语言:javascript
复制
df1 = df.set_index('ObjectID')

df1.columns = pd.MultiIndex.from_arrays(zip(*df1.columns.str.split('_')))

df1.stack(0).reset_index().drop('level_1', axis=1)

输出:

代码语言:javascript
复制
   ObjectID       ID  Var1  Var2  Var3
0         1  98398.0   3.0  10.0   9.0
1         1  19231.0   6.0   7.0   5.0
2         2  87868.0   8.0   5.0   4.0
3         3   4579.0   5.0   6.0   6.0
4         3  24833.0   6.0   2.0   2.0
5         4   2514.0   1.0   6.0   9.0
票数 10
EN

Stack Overflow用户

发布于 2019-06-27 00:18:30

你可以拼接子数据帧:

代码语言:javascript
复制
def ren_col(x):
    if x.startswith('Obj'): return x
    elif x.endswith('ID'): return 'Sub_ID'
    else: return x[-4:]

cols = df.columns    
resul = pd.concat([df[sub].rename(ren_col, axis=1).dropna()
                   for sub in [[cols[0]] + cols[i:i+4].tolist()
                               for i in range(1, len(cols), 4)]]
                  ).sort_values(['ObjectID', 'Sub_ID']).reset_index(drop=True)

不出所料,它提供了:

代码语言:javascript
复制
   ObjectID   Sub_ID  Var1  Var2  Var3
0         1  19231.0   6.0   7.0   5.0
1         1  98398.0   3.0  10.0   9.0
2         2  87868.0   8.0   5.0   4.0
3         3   4579.0   5.0   6.0   6.0
4         3  24833.0   6.0   2.0   2.0
5         4   2514.0   1.0   6.0   9.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56776539

复制
相关文章

相似问题

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