【问题标题】:How to find the rank of groupby Dataframe in Pandas如何在 Pandas 中查找 groupby Dataframe 的排名
【发布时间】:2021-02-21 23:10:57
【问题描述】:

我很难找到一种简单的方法来对按日期和产品分组的产品值进行排名。比如2020年6月,我们有6个产品,它们有不同的价值,我想按照它们在总数中的市场份额来排名,无论如何,这相当于按照它们的价值来排名。

我尝试使用this link 的答案,但没有给出正确的输入。

我可以很高兴地将这个 df 转换为二维列表并使用 for 循环进行排序,但我想说,由于我使用的是 pandas,我会尽量坚持使用 .rank() 之类的功能。

df = pd.DataFrame()

df['Market'] = ['usa'] *2 + ['russia']*2 + ['china'] * 8
df["Product"] = ["A", "B", "C", "D", "E", "F"] * 2
df["Date"] = ["1/6/2020"] * 6 + ["1/9/2020"] * 6
df["Date"] = df["Date"].astype("datetime64[ns]")
df["Value"] = [100, 200, 300, 400, 500, 600, 1000, 2000, 800, 900, 999, 10000] 


  Product   Date       Value   Expected Ranking
0   A        1/6/2020   100    1
1   B        1/6/2020   200    2 
2   C        1/6/2020   300    3
3   D        1/6/2020   400    4
4   E        1/6/2020   500    5
5   F        1/6/2020   600    6
6   A        1/9/2020   1000   3
7   B        1/9/2020   2000   2
8   C        1/9/2020   800    6
9   D        1/9/2020   900    5
10  E        1/9/2020   999    4
11  F        1/9/2020   10000  1

【问题讨论】:

    标签: python pandas numpy dataframe group-by


    【解决方案1】:

    尝试通过dense

    df.groupby('Date')['Value'].rank(method='dense')
    Out[224]: 
    0     1.0
    1     2.0
    2     3.0
    3     4.0
    4     5.0
    5     6.0
    6     6.0
    7     5.0
    8     4.0
    9     3.0
    10    2.0
    11    1.0
    Name: Value, dtype: float64
    

    【讨论】:

    • 哦哇哦...简洁占上风我猜,你甚至不需要使用 groupby...
    • 嗨,如果值不同,它实际上不起作用,我已经编辑了问题。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2021-05-09
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多