将groupby转换为具有布尔值列的数据帧

2024-06-17 10:55:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我的输入数据是-

    "Name" : ["Alice", "Bob", "Jake", "Jake", "Steve" , "Bob"] , 
    "City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"],
    "CityID" : ["1", "1", "2", "1", "1", "2"]
 } ) 

打印时显示如下:

   City         Name  CityID
0   Seattle    Alice       1
1   Seattle      Bob       1
2  Portland     Jake       2 
3   Seattle     Jake       1
4   Seattle    Steve       1
5  Portland      Bob       2

我想得到这样的东西-

       City CityID  Alice   Bob  Jake  Steve
0   Seattle      1   True  True  True   True
1  Portland      2  False  True  True  False

我不知道怎么到这里。 我确实试过groupby函数

df.groupby(['City','CityID', 'Name']).first()

这让我想到了-

    City    CityID     Name
 Seattle         1    Alice
                        Bob
                       Jake   
Portland         2      Bob
                       Jake
                      Steve    

我不知道以后该怎么办,任何提示都会有很大帮助


Tags: 数据函数namefalsetruecitydfsteve
1条回答
网友
1楼 · 发布于 2024-06-17 10:55:12

使用^{}dtype=bool参数,在MultiIndex中使用唯一值,由max

df = (pd.get_dummies(df.set_index(['City','CityID'])['Name'], dtype=bool)
        .max(level=[0,1])
        .reset_index())
print (df)
       City CityID  Alice   Bob  Jake  Steve
0   Seattle      1   True  True  True   True
1  Portland      2  False  True  True  False

如果需要groupby解决方案,请创建一个新列,用True填充^{},使用^{},按^{}重新整形,最后将MultiIndex转换为^{}列,^{}表示删除列名a

df = (df.assign(a=True)
        .groupby(['City','CityID', 'Name'], sort=False)['a']
        .first()
        .unstack(fill_value=False)
        .reset_index()
        .rename_axis(None, axis=1))
print (df)
       City CityID  Alice   Bob  Jake  Steve
0   Seattle      1   True  True  True   True
1  Portland      2  False  True  True  False

相关问题 更多 >