这是桌子
对于每个(shopID, productID)
组合,我想选择最大的Quantity
,如果它们是多个,则随机选择一个,结果如下:
第一个表格的代码
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"]})
如何提出第二张桌子?
答案 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