首页 > 解决方案 > 透视 Pandas 数据框以查看是否满足条件

问题描述

我有以下 DataFrame 表示用户是否在某周、某年出现:

    User    Year    Week
0   John    2020    1
1   John    2020    2
2   Steve   2020    1
3   Fred    2020    3
4   George  2020    2   
5   George  2020    3
    ...     ...     ...
200 John    2021    2
201 John    2021    4
202 Steve   2021    2
203 Fred    2021    2
204 George  2021    1   
205 George  2021    4

我想得到一个 DataFrame 来分组数据集User,每一列代表他是否出现在某一年的某一周,每一列的类型要么是布尔型,要么是整数,可能值为 0 或 1。

它看起来像这样:

        2020_1  2020_2  2020_3  ... 2021_1  2021_2  2021_3  2021_4
John         1       1       0  ...      0       1       0       1
Steve        1       0       0  ...      0       1       0       0
Fred         0       0       1  ...      0       1       0       0
George       0       1       1  ...      1       0       0       1

无论如何都可以在不遍历 DataFrme 的情况下做到这一点?

谢谢。

标签: pythonpandas

解决方案


创建一个新列并使用pd.crosstab

pd.crosstab(df['User'],
            df[['Year','Week']].astype(str).apply('_'.join, axis=1)
           )

输出:

col_0   2020_1  2020_2  2020_3  2021_1  2021_2  2021_4
User                                                  
Fred         0       0       1       0       1       0
George       0       1       1       1       0       1
John         1       1       0       0       1       1
Steve        1       0       0       0       1       0

推荐阅读