gpt4 book ai didi

Python 选择和计数元素

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:00 24 4
gpt4 key购买 nike

我有一个以下格式的 pandas 数据框:

import pandas as pd

d1 = {'Product ID': ['A','B','C','D','A','D','E','A','B','C','B','C','E'],
'Buyer ID': [1,1,1,1,2,2,2,3,3,3,4,5,5]}
df1 = pd.DataFrame(d1)

格式为:

Product ID  Buyer ID
A 1
B 1
C 1
D 1
A 2
D 2
E 2
A 3
B 3
C 3
B 4
C 5
E 5

数据框显示个人随时间购买的产品。

我想做的是获得个人购买的第一个和最后一个产品以及在第一次和最后一次购买之间购买的产品数量。在我的示例中,买家 1 总共购买了 4 件产品,他第一次购买的是产品 A,最后一次购买的是产品 D(最后提供了完整的预期结果表)。如果个人只购买了 1 件产品,则所列产品的结果计数将为 1。

我要获取的结果是这样的格式:

Product ID  Buyer ID    Count
A 1 4
D 1 4
A 2 3
E 2 3
A 3 3
C 3 3
B 4 1
C 5 2
E 5 2

我无法集中精力解决这个问题。有人可以帮忙吗?

最佳答案

您可以使用函数列表 ["first", "last", "count"] 来聚合结果,然后将其 reshape 为您需要的格式:

(df1.groupby("Buyer ID")["Product ID"].agg(["first", "last", "count"])
.set_index('count', append=True).stack()
.reset_index(level=2, drop=True)
.rename("Product ID").reset_index().drop_duplicates())

enter image description here


或者另一种选择,使用 groupby.apply 并使用 iloc 获取第一行和最后一行:

(df1.groupby("Buyer ID", group_keys=False)
.apply(lambda g: g.iloc[[0,-1], :].assign(count = len(g)))
.drop_duplicates())

enter image description here

关于Python 选择和计数元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42737395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com