вывести количество элементов в заголовке pandas - PullRequest
2 голосов
/ 06 февраля 2020

Вот мой фрейм данных: '' '

 customer product     product1
0        A    hats        shoes
1        A   socks        shoes
2        B   socks        shoes
3        C    hats        shoes
4        C    None  accessories
5        B   socks        shoes
6        A    hats        shoes
7        C    None  accessories

' '' Я хочу вывести что-то вроде этого:

customer    shoes   hats    socks   accessories
A             #       #        #    #
B             #       #        #    #
C             #       #        #    #

Я попытался сгруппировать так: '' '

dfB.set_index('customer').groupby(['product', 'product1']).agg({'product':['count'], 'product1':['count']}) '''

Я получил такой вывод:

'' '

 product product1
                   count    count
product product1                 
 hats   shoes          3        3
 socks  shoes          3        3

' ''

Пожалуйста, помогите

Ответы [ 2 ]

5 голосов
/ 06 февраля 2020

IIU C

мы можем установить индекс на 'customer', а затем составить стек данных, что позволит вам выполнить агрегацию с value_counts

df2 = df.set_index('customer').stack().groupby(level=0).value_counts().unstack()

-

print(df2)
          None  accessories  hats  shoes  socks
customer                                       
A          NaN          NaN   2.0    3.0    1.0
B          NaN          NaN   NaN    2.0    2.0
C          2.0          2.0   1.0    1.0    NaN

если вас не волнует None, вы можете преобразовать его в истинное нулевое значение, и оно будет игнорироваться в группе

print(df.replace('None',np.nan).set_index('customer').stack().groupby(level=0).value_counts().unstack())

          accessories  hats  shoes  socks
customer                                 
A                 NaN   2.0    3.0    1.0
B                 NaN   NaN    2.0    2.0
C                 2.0   1.0    1.0    NaN
3 голосов
/ 06 февраля 2020

Вы могли бы melt тогда pivot_table

# df = df.replace('None', None) # If `'None'` and not `None`

(df.melt('customer', value_name='product')
   .pivot_table(index='customer', columns='product', aggfunc='size'))

product   accessories  hats  shoes  socks
customer                                 
A                 NaN   2.0    3.0    1.0
B                 NaN   NaN    2.0    2.0
C                 2.0   3.0    1.0    NaN
...