首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将某些行和列子集的列转换为行?

如何将某些行和列子集的列转换为行?
EN

Stack Overflow用户
提问于 2019-11-10 17:01:33
回答 1查看 51关注 0票数 0

如何使用我的数据将行转换为列?我当前的数据集看起来像下面所示的‘原始df’,我希望它看起来像'New 2‘。为了明确起见,任命1,与SDAP1和RDAP1匹配,因此任命2对应于SDAP2 RDAP2。

原始df:

代码语言:javascript
复制
Name    Appoint1    Appoint2    Appoint1t    Appoint2t   SDAP1    RDAP1    SDAP2    RDAP2     

Sam     23.09.2017  24.09.2017  11:00:00     11:00:00    3        -9        6        8
Sarah   24.09.2017  27.09.2017  12:00:00     12:00:00    2        Nan       7        8
Steve   23.10.2017  31.10.2017  11:00:00     12:00:00    5         9        7        9
Mark    23.09.2017              11:00:00                 0         3        
James   23.09.2017  26.09.2017               11:00:00    4         7        1        4

新df:

代码语言:javascript
复制
Name    Appointments    Appointmenttime    SDAP    RDAP

Sam     23.09.2017      11:00:00           3       -9
Sam     24.09.2017      11:00:00           6        8
Sarah   24.09.2017      12:00:00           2        NaN
Sarah   27.09.2017      12:00:00           7        8
Steve   23.10.2017      11:00:00           5        9
Steve   31.10.2017      12:00:00           7        9
Mark    23.09.2017      11:00:00           0        3
James   23.09.2017                         4        7
James   26.09.2017      11:00:00           1        4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-10 17:17:44

是否有必要使用wide_to_long?使用concat似乎容易得多。

代码语言:javascript
复制
df1 = df[["Name","Appoint1","Appoint1t"]]
df2 = df[["Name","Appoint2","Appoint2t"]].rename(columns={"Appoint2": "Appoint1", "Appoint2t": "Appoint1t"})

print (pd.concat([df1,df2]).dropna().sort_index())

#
    Name    Appoint1 Appoint1t
0    Sam  23.09.2017  11:00:00
0    Sam  24.09.2017  11:00:00
1  Sarah  24.09.2017  12:00:00
1  Sarah  27.09.2017  12:00:00
2  Steve  23.10.2017  11:00:00
2  Steve  31.10.2017  12:00:00
3   Mark  23.09.2017  11:00:00
4  James  23.09.2017  11:00:00
4  James  26.09.2017  11:00:00

首先重命名列,使用wide_to_long

代码语言:javascript
复制
df.columns = ['Name', 'Appoint_1', 'Appoint_2', 'Time_1', 'Time_2']

print (pd.wide_to_long(df,stubnames=["Appoint","Time"],i="Name",j="count",sep='_')
       .dropna().reset_index().drop("count",axis=1))

#
    Name     Appoint      Time
0    Sam  23.09.2017  11:00:00
1  Sarah  24.09.2017  12:00:00
2  Steve  23.10.2017  11:00:00
3   Mark  23.09.2017  11:00:00
4  James  23.09.2017  11:00:00
5    Sam  24.09.2017  11:00:00
6  Sarah  27.09.2017  12:00:00
7  Steve  31.10.2017  12:00:00
8  James  26.09.2017  11:00:00
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58790943

复制
相关文章

相似问题

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