Python 透视数据帧以查看是否满足条件

Python 透视数据帧以查看是否满足条件,python,pandas,Python,Pandas,我有以下数据框,表示某个用户是否在某个星期、某个年份出现: 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 20

我有以下数据框,表示某个用户是否在某个星期、某个年份出现:

    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
我想得到一个数据框,它根据
用户对数据集进行分组,每列表示他是否在某一年的某一周出现,每列的类型可以是布尔型,也可以是可能值为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的情况下,是否仍然可以执行此操作


谢谢。

创建一个新列并使用
pd。交叉表

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

这里有一种方法可以做到这一点:

将熊猫作为pd导入
df=pd.DataFrame({
“用户”:[“约翰”、“约翰”、“史蒂夫”、“弗雷德”、“乔治”、“乔治”],
“年份”:[202020202020020020],
“周”:[1,2,1,3,2,3]})
#为年\周添加帮助器列
df[“年/周”]=df[“年”].map(str)+“周”+df[“周”].map(str)
#按用户和年份/周分组,然后取消堆栈并用0填充NaN
df.groupby([“用户”,“年/周]).size().unstack(填充值=0)
结果:

| User   |   2020_1 |   2020_2 |   2020_3 |
|:-------|---------:|---------:|---------:|
| Fred   |        0 |        0 |        1 |
| George |        0 |        1 |        1 |
| John   |        1 |        1 |        0 |
| Steve  |        1 |        0 |        0 |

是的,但我仍然需要根据当年是否存在使用情况,用相应的值填充它,weekI没有得到它,你试过我的代码吗?你不喜欢它的什么地方?对不起,也许我没有说清楚:即使“年·周”中没有任何用户,我也希望该专栏存在。在我的例子中,
2021\u 3
中没有人,但我希望该专栏是there@Heathcliff在
交叉表之后探索
reindex
。使用
unstack(fill_value=0)
将保持数据类型为
int
。嘿!那是“全港毒品”。每天学习一些新的东西。这三种方法的解决方案都是惊人的。我学到了一些新东西。答复中的所有3位SO成员发送Thx+1对所有3对问题
pd.crosstab(df.User, df['Year'].astype(str)+"_"+df['Week'].astype(str))