[英]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.