Py学习  »  Python

以python大小和计数计算频率

user18309957 • 3 年前 • 1271 次点击  

我有一个数据框,看起来像这样:

Item       Year     
I1         2015
I2         2016
I1         2017
I2         2014

项目 I2 例如,在2016年和2014年售出

我想分组 Item Year 然后做什么 R 代码:

top_items <- data %>% select(Item, Year) %>%
  group_by(Year, Item) %>%
  summarize(sales_trend = n()) %>%
  arrange(desc(sales_trend))

也就是说,我必须对最畅销的商品进行分类。

我正在尝试以下Python代码:

b_data = pd.DataFrame(data[["Item", "Year"]].groupby(["Item", "Year"]).size()).sort_values(by=[0], ascending=False)

但我还有一个专栏 0 ,我想按它排序,但我不想调用该列 0 ,怎么叫 sales_trend 就像我的 R .

而且如果我想得到这个 Python 以下内容的等价性 R 这就完成了前面的工作,怎么做?

...
  arrange(desc(sales_trend))
  slice_head(n = 5) %>%
  mutate(Year = as.integer(Year), rank = 1:5) %>%
  select(-sales_trend)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133006
 
1271 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Panwen Wang
Reply   •   1 楼
Panwen Wang    3 年前

具有 datar ,一个重新设计熊猫API的熊猫包装器,我们可以用python翻译您的R代码:

>>> from datar.all import c, f, tibble, select, group_by, summarize, arrange, desc, n
>>>
>>> data = tibble(Item=c("I1", "I2", "I1", "I2", "I2"), Year=c(2015, 2016, 2017, 2014, 2014))
>>> data
      Item    Year
  <object> <int64>
0       I1    2015
1       I2    2016
2       I1    2017
3       I2    2014
4       I2    2014  # add one more item to see if it pops up at the top
>>> top_items = (
...     data
...     >> select(f.Item, f.Year)
...     >> group_by(f.Year, f.Item)
...     >> summarize(sales_trend=n())
...     >> arrange(desc(f.sales_trend))
... )
[2022-03-17 10:15:54][datar][   INFO] `summarise()` has grouped output by ['Year'] (override with `_groups` argu
ment)
>>> top_items
     Year     Item  sales_trend
  <int64> <object>      <int64>
0    2014       I2            2
1    2015       I1            1
2    2016       I2            1
3    2017       I1            1
[TibbleGrouped: Year (n=4)]
geen21
Reply   •   2 楼
geen21    3 年前
df.groupby("Year")["Item"].value_counts().sort_values(ascending=True)