Сохранение всех строк с верхними n элементами на основе количества значений в DataFrame - PullRequest
0 голосов
/ 19 января 2019

Я новичок в Python и Pandas и у меня возникли некоторые проблемы при работе с DataFrame s.

У меня есть следующие данные, установленные в Pandas DataFrame.

InvoiceId       StockCode      Price
XXX             ProductA       199,00
XXX             ProductB       78,00
XXX             ProductC       100,00
YYY             ProductB       78,00
YYY             ProductA       199,00
ZZZ             ProductA       199,00
ZZZ             ProductB       78,00

...             ...            ...

ZZZ             ProductY       19,00

Я хочу посчитать, как часто каждый продукт был куплен, и сохранить лучшие n продуктов в моем DataFrame.Как я могу это сделать?

Например, для лучших n = 2 продуктов результат будет следующим:

InvoiceId       StockCode      Price
XXX             ProductA       199,00
XXX             ProductB       78,00
YYY             ProductB       78,00
YYY             ProductA       199,00
ZZZ             ProductA       199,00
ZZZ             ProductB       78,00

Т.е. строки с ProductC и ProductZ были удалены.

В конце я хочу представить данные по первым n продуктам следующим образом.

         ProductA    ProductB
XXX          1           1
YYY          1           1
ZZZ          1           1

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 19 января 2019

Вам нужно:

#convert column to numeric
df['Price'] = df['Price'].str.replace(',','.').astype(float)

#get top2 values from index
print (df['Price'].value_counts().iloc[:2])
78.0     3
199.0    3
Name: Price, dtype: int64

#filter rows with top2 values (78, 199)
df = df[df['Price'].isin(df['Price'].value_counts().iloc[:2].index)]
print (df)
  InvoiceId StockCode  Price
0       XXX  ProductA  199.0
1       XXX  ProductB   78.0
3       YYY  ProductB   78.0
4       YYY  ProductA  199.0
5       ZZZ  ProductA  199.0
6       ZZZ  ProductB   78.0

#count top2
df1 = pd.crosstab(df['InvoiceId'],
                  df['StockCode'])
print (df1)
StockCode  ProductA  ProductB
InvoiceId                    
XXX               1         1
YYY               1         1
ZZZ               1         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...