【问题标题】:Converting Pandas groupby to a dataframe having columns with boolean values将 Pandas groupby 转换为具有布尔值列的数据框
【发布时间】:2020-04-01 03:19:23
【问题描述】:

我的输入数据是这个-

    "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    

我不知道在此之后如何继续,任何提示都会有很大帮助。

【问题讨论】:

    标签: python pandas dataframe pandas-groupby multi-index


    【解决方案1】:

    使用get_dummiesdtype=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 填充的新列和DataFrame.assign,使用GroupBy.first,通过Series.unstack 重塑,最后将MultiIndex 转换为DataFrame.reset_index 的列,DataFrame.rename_axis 用于删除列名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
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2023-03-21
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2016-07-05
      • 2020-05-20
      • 2017-01-12
      相关资源
      最近更新 更多