簡體   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