繁体   English   中英

如何部分 pivot pandas 中的表

[英]How to partially pivot a table in pandas

我不确定“pivot”是否是正确的术语,但我有类似的东西

ID 类型 日期
123 一个 2020 年 1 月 2 日
123 2020 年 1 月 7 日
123 C 2020 年 1 月 14 日
456 一个 5-18-2019
456 2019 年 5 月 30 日
789 一个 2021 年 8 月 7 日
789 2021 年 8 月 16 日
789 C 2021 年 8 月 23 日
789 D 2021 年 8 月 30 日

我想把它变成这样的东西:

ID type_1 日期_1 类型_2 日期_2
123 一个 2020 年 1 月 2 日 2020 年 1 月 7 日
123 2020 年 1 月 7 日 C 2020 年 1 月 14 日
456 一个 5-18-2019 2019 年 5 月 30 日
789 一个 2021 年 8 月 7 日 2021 年 8 月 16 日
789 2021 年 8 月 16 日 C 2021 年 8 月 23 日
789 C 2021 年 8 月 23 日 D 2021 年 8 月 30 日

这样它们的类型是成对的,并且每一行都有两种类型和日期。

尝试这个:

new_df = pd.concat([
    df.groupby('ID').apply(lambda g: g.head(g.shape[0] - 1)).reset_index(drop=True),
    df.groupby('ID').apply(lambda g: g.tail(g.shape[0] - 1)).reset_index(drop=True).drop('ID', axis=1)
], axis=1)

Output:

>>> new_df
    ID type       date type       date
0  123    A   1-2-2020    B   1-7-2020
1  123    B   1-7-2020    C  1-14-2020
2  456    A  5-18-2019    B  5-30-2019
3  789    A   8-7-2021    B  8-16-2021
4  789    B  8-16-2021    C  8-23-2021
5  789    C  8-23-2021    D  8-30-2021

更紧凑的版本:

new_df = pd.concat([df.groupby('ID').apply(lambda g:g.head(g.shape[0]-1)).reset_index(drop=True),df.groupby('ID').apply(lambda g:g.tail(g.shape[0]-1)).reset_index(drop=True).drop('ID', axis=1)],axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM