get unique id,get latest date,get highest number and lowest number python pandas dataframe [duplicate]

7gcisfzg  于 2023-06-28  发布在  Python
关注(0)|答案(1)|浏览(104)

此问题已在此处有答案

Max and Min date in pandas groupby(3个答案)
5天前关闭。
这篇文章是编辑并提交审查5天前.
这是我的数据的一个例子
| ID|购买日期|购买的项目数|
| - -----|- -----|- -----|
| 十二岁|2023年12月10日|2|
| 十二岁|2019 -01- 22 2019 -01- 22|三十四|
| 五十六|2020年3月24日|十二岁|
| 二十三|2012年12月23日|一个|
| 二十三|23-05-2012|三个|
| 二十三|23-06-2012| 4|
| 二十四|2023年12月10日|二十四|
| 三十八|23-02-2012|二十一|
| 十六|2023年12月10日|三十四|
| 五十四个|2019 -09- 02||
| 五十四个|2020年3月24日|十九|
我想提取每个“ID”的最高和最低purchaseNo以及它们的制作日期。预期结果应该如下所示:
| ID|最大购买日期|maxPurchaseAmount|最少购买日期|leastPurchaseAmount|
| - -----|- -----|- -----|- -----|- -----|
| 十二岁|2019 -01- 22 2019 -01- 22|三十四|2023年12月10日|2|
| 五十六|2020年3月24日|十二岁|2020年3月24日|十二岁|
| 二十三|23-06-2012| 4| 2012年12月23日|一个|
| 二十四|2023年12月10日|二十四|2023年12月10日|二十四|
| 三十八|23-02-2012|二十一|23-02-2012|二十一|
| 十六|2023年12月10日|三十四|2023年12月10日|三十四|
| 五十四个|2020年3月24日|十九|2019 -09- 02|十一|
请问我怎么才能做到这一点?
我试了这个代码:

details = data.groupby('ID').min()['purchaseDate']

但我得到一个KeyError:'purchaseDate'。我已经仔细检查过了,以确保该栏没有拼错。我已经确保填写(0)
我也试着这样做:

details = data.groupby('ID').min()['numOfItemsPurchased']

它不会抛出错误,但我不知道如何向其中添加更多列
我试过这个代码:

data.groupby(['ID']).agg({'purchaseDate': [np.min,np.max],
                          'numOfItemsPurchased' : [np.min,np.max]})

然后我得到一个TypeError:“int”和“str”的示例之间不支持“<=”

cs7cruho

cs7cruho1#

尝试:

def fn(x):
    mx, mn = x["numOfItemsPurchased"].idxmax(), x["numOfItemsPurchased"].idxmin()
    return pd.Series(
        {
            "maxPurchaseDate": x.at[mx, "purchaseDate"],
            "maxPurchaseAmount": x.at[mx, "numOfItemsPurchased"],
            "leastPurchaseDate": x.at[mn, "purchaseDate"],
            "leastPurchaseAmount": x.at[mn, "numOfItemsPurchased"],
        }
    )

# convert to datetime if necessary:
df["purchaseDate"] = pd.to_datetime(df["purchaseDate"], dayfirst=True)

out = df.groupby("ID", sort=False).apply(fn).reset_index()
print(out)

图纸:

ID maxPurchaseDate  maxPurchaseAmount leastPurchaseDate  leastPurchaseAmount
0  12      2023-01-12                 34        2023-10-12                    2
1  56      2020-03-24                 12        2020-03-24                   12
2  23      2012-06-23                  4        2012-12-23                    1
3  24      2023-10-12                 24        2023-10-12                   24
4  38      2012-02-23                 21        2012-02-23                   21
5  16      2023-10-12                 34        2023-10-12                   34
6  54      2020-03-24                 19        2020-09-02                   11

相关问题