跨多列非数字数据创建数据透视表 table

Making a pivot table across multiple columns of non-numeric data

以下代码生成一个虚拟数据帧:

import pandas as pd

df = pd.DataFrame(
    {
        'user_id': [1,2,3,1,1],
        'account_type': ['google','facebook','apple','facebook','google'],
        'activated': ['y','pending','n','y','y']
    
    }
)

df.head()

我需要为 account_type 列中的 unique_values 创建一个数据透视表 table,它由 user_id 列聚合。

基本上,对于每个 user_id,我想查看每种类型的帐户中有多少在 activated 列下具有 n 以外的值。

生成的数据帧应为:

到目前为止我被这个打败了,因为 pivot_table 函数似乎只能使用数值。

尝试通过 groupby()where()transform() 方法:

df['count']=(df.groupby(['user_id','account_type'])['activated']
           .transform(lambda x:x.where(df['activated'].ne('n')).count()))

最后使用pivot_table()rename_axis()方法:

result=df.pivot_table(index='user_id',columns='account_type',values='count',fill_value=0).rename_axis(columns=None)

result 的输出:

          apple     facebook    google
user_id             
1           0       1           2
2           0       1           0
3           0       0           0

使用 DataFrame.assign for new column filled by mask compared activated for no n, and then pivoting by DataFrame.pivot_tableaggfunc=sum 计数 Trues:

df = (df.assign(new= df['activated'].ne('n'))
        .pivot_table(index='user_id',
                     columns='account_type',
                     values='new',
                     fill_value=0,
                     aggfunc='sum')
         .rename_axis(columns=None))

print (df)
         apple  facebook  google
user_id                         
1            0         1       2
2            0         1       0
3            0         0       0