Обработка сложных преобразований данных с помощью pivot_table в Python - PullRequest
0 голосов
/ 18 июня 2020

Я работаю pandas DataFrame формы 7837 rows and 19 columns. Мне интересно узнать, сколько раз в месяц появляется product_id, то есть столбец date и связанный с ним amount. Потому что product_id может иметь разные суммы. Итак, я ищу способ сказать, например, product_id 1921 с появлением amount 59 ....

Вот уменьшенная версия pandas dataframe

print(df)

     CompanyName        Produktname     product_id    amount       Date
0     companyA            productA        1921         59.0       Jan-2020
1     companyB            productB        114          NaN        May-2020
2     companyC            productC        469          NaN        Feb-2020
3     companyD            productD        569          18.0       Jun-2020
4     companyE            productE        569          18.0      March-2020

Я думаю, что pivot_table может быть полезен. Я хотел сначала увидеть, сколько раз каждый product_id появлялся с датой в столбце

pd.pivot_table(df, index="product_id", values= "product_id" ,columns="Date", aggfunc="count")

, но получаю сообщение об ошибке:

ValueError: Grouper for 'product_id' not 1-dimensional

Есть ли способ обойти это или другое эффективный способ справиться с этим?

1 Ответ

1 голос
/ 18 июня 2020

IIU C используйте:

df = df.pivot_table(index="product_id", values= "amount" ,columns="Date", aggfunc="count")
print (df)
Date        Feb-2020  Jan-2020  Jun-2020  March-2020  May-2020
product_id                                                    
114              NaN       NaN       NaN         NaN       0.0
469              0.0       NaN       NaN         NaN       NaN
569              NaN       NaN       1.0         1.0       NaN
1921             NaN       1.0       NaN         NaN       NaN

Для правильного заказа возможно использование:

df['Date'] = pd.to_datetime(df['Date'], format='%b-%Y')
df = df.pivot_table(index="product_id", 
                    values= "amount" ,
                    columns="Date", 
                    aggfunc="count", 
                    fill_value=0).rename(columns = lambda x: x.strftime('%b-%Y'))
print (df)
Date        Jan-2020  Feb-2020  Mar-2020  May-2020  Jun-2020
product_id                                                  
114                0         0         0         0         0
469                0         0         0         0         0
569                0         0         1         0         1
1921               1         0         0         0         0
...