как узнать, сколько дней каждый элемент оставался в каждой категории - PullRequest
1 голос
/ 10 июля 2020

Мой набор данных выглядит примерно так:

Item | Date        | Category
1    | 01/01/2019  | A
1    | 02/01/2019  | A
1    | 03/01/2019  | B
2    | 10/02/2019  | A
2    | 11/02/2019  | B
2    | 12/02/2019  | B
2    | 13/01/2019  | C
3    | 07/02/2019  | A
3    | 10/02/2019  | A 

Итак, это в основном набор данных панели, потому что для каждого элемента есть много дат, но они не обязательно продолжаются (см. Пункт 3). Когда предмет исчезает, это означает, что он был продан. Кроме того, коды предметов не будут повторяться, поэтому элемент 1 ссылается только на этот элемент. «Дата» имеет строковый формат. Это всего лишь образец, но в наборе данных миллионы строк.

Моя цель - найти описательную статистику, и меня особенно интересует получение среднего количества дней, которое элемент проводит в каждой категории.

Пытался использовать

df.groupby(category).mean()

, но я обнаружил, что это не совсем то, что я ищу. Есть идеи?

1 Ответ

1 голос
/ 10 июля 2020

IIU C, вы можете попробовать groupby с nunique, чтобы получить номер уникальной даты для элемента и категории

print (df.groupby(['Item', 'Category'])['Date'].nunique()
Item  Category
1     A           2
      B           1
2     A           1
      B           2
      C           1
3     A           2
Name: Date, dtype: int64

, за которым следует unstack, чтобы сделать его с другой формой .

print (df.groupby(['Item', 'Category'])['Date'].nunique().unstack(fill_value=0))
Category  A  B  C
Item             
1         2  1  0
2         1  2  1
3         2  0  0

что эквивалентно pivot_table:

df.pivot_table(index='Item', columns='Category', values='Date', 
               aggfunc='nunique', fill_value=0)
...