جدول محوري يعتمد على groupby في Pandas

2

لدي dataframe مثل هذا:

customer_id | date     | category
1           | 2017-2-1 | toys
2           | 2017-2-1 | food
1           | 2017-2-1 | drinks
3           | 2017-2-2 | computer
2           | 2017-2-1 | toys
1           | 2017-3-1 | food

وأريد أن أصنع category يقوم العمود بتقييم أعمدتي الجديدة وترميز واحد ساخن لتلك الأعمدة ، وأنا أعلم أنه يمكنني استخدامها df.pivot_table(index = ['customer_id'], columns = ['category']) ، أريد أيضًا التجميع حسب date لذلك كل صف يحتوي فقط على معلومات من نفس التاريخ ، كما هو الحال في الإخراج المطلوب أدناه ، يحتوي المعرّف 1 على صفين لأن هناك تاريخان فريدان في date عمود.

customer_id | toys | food | drinks | computer 
1           | 1    | 0    | 1      | 0        
1           | 0    | 1    | 0      | 0
2           | 1    | 1    | 0      | 0
3           | 0    | 0    | 0      | 1

2 الاجابة

2
افضل جواب

قد تبحث عنه crosstab

pd.crosstab([df.customer_id,df.date],df.category).reset_index(level=1,drop=True)
Out[102]: 
category     computer  drinks  food  toys
customer_id                              
1                   0       1     0     1
1                   0       0     1     0
2                   0       0     1     1
3                   1       0     0     0
:مؤلف
0

على افتراض أن الإطار الخاص بك يسمى df ، يمكنك إضافة عمود مؤشر ثم استخدامه مباشرة .pivot_table :

df['Indicator'] = 1

pvt = df.pivot_table(index=['date', 'customer_id'],
                     columns='category',
                     values='Indicator')\
        .fillna(0)

هذا يعطي dataframe يشبه:

category              computer  drinks  food  toys
date     customer_id                              
2017-2-1 1                 0.0     1.0   0.0   1.0
         2                 0.0     0.0   1.0   1.0
2017-2-2 3                 1.0     0.0   0.0   0.0
2017-3-1 1                 0.0     0.0   1.0   0.0
:مؤلف
فوق
قائمة طعام