选择特定日期的最大数量

时间:2019-10-12 11:36:38

标签: python python-3.x pandas

这是桌子

enter image description here

对于每个(shopID, productID)组合,我想选择最大的Quantity,如果它们是多个,则随机选择一个,结果如下:

enter image description here

第一个表格的代码

from datetime import date 
import pandas as pd
df=pd.DataFrame({"Date":[date(2019,10,1),date(2019,10,1),date(2019,10,1),date(2019,10,2),date(2019,10,2),date(2019,10,2),date(2019,10,3),date(2019,10,3),date(2019,10,3)],
                "ShopID":[1,1,1,1,1,1,2,2,2],
                "ProductID":[1,1,1,2,2,2,1,1,1],
                "Quantity":[3,3,2,4,5,6,4,5,6],
                "Desc":["a","b","c","d","e","f","g","h","i"]})

如何提出第二张桌子?

4 个答案:

答案 0 :(得分:2)

使用DataFrame.sort_values 根据{{​​1}}进行订购。然后将groupby.first Quantity groupby.last结合使用:

ascending = False

new_df=df.sort_values('Quantity').groupby(['Date','ShopID','ProductID']).last()
print(new_df)

或:

Date       ShopID ProductID  Quantity Desc             
2019-10-01 1      1                 3    b
2019-10-02 1      2                 6    f
2019-10-03 2      1                 6    i

答案 1 :(得分:2)

您可以使用groupby和idxmax函数,如下所示。比对列排序有效

from datetime import date 
import pandas as pd
df=pd.DataFrame({"Date":[date(2019,10,1),date(2019,10,1),date(2019,10,1),date(2019,10,2),date(2019,10,2),date(2019,10,2),date(2019,10,3),date(2019,10,3),date(2019,10,3)],
                "ShopID":[1,1,1,1,1,1,2,2,2],
                "ProductID":[1,1,1,2,2,2,1,1,1],
                "Quantity":[3,3,2,4,5,6,4,5,6],
                "Desc":["a","b","c","d","e","f","g","h","i"]})

ids = df.groupby(["ShopID", "ProductID", "Date"])["Quantity"].idxmax()
df.loc[ids]

答案 2 :(得分:2)

发布的两个答案都是错误的,因为它们适用于本示例,但不要考虑到ShopID + ProductID可以在不同的日期重复,因此它们的方法将失败。这也是一种将dt用作组指示符的方法:

df.sort_values(['ShopID', 'ProductID', 'dt', 'Quantity'], 
               ascending=[True, True, True, False]).groupby(['ShopID', 'ProductID', 'dt']).head(1)

输出

          dt  ShopID  ProductID  Quantity Desc
0 2019-10-01       1          1         3    a
5 2019-10-02       1          2         6    f
8 2019-10-03       2          1         6    i

答案 3 :(得分:0)

<?php echo form_dropdown("kegiatan_id",$option_kegiatan,'',"id='kegiatan_id'"); ?> sort_values应该可以工作。正如您的标题中提到的drop_duplicates,我想您也想将specific date分组。如果不这样做,只需从date

中取出date
cols