Python select 并计数元素
Python select and count elements
我有一个 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(最后提供了完整的预期结果 table)。如果个人只购买了 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"]
聚合结果,然后将其重塑为您需要的格式:
(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())
或另一种选择,使用 groupby.apply
并使用 iloc
:
获取第一行和最后一行
(df1.groupby("Buyer ID", group_keys=False)
.apply(lambda g: g.iloc[[0,-1], :].assign(count = len(g)))
.drop_duplicates())
我有一个 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(最后提供了完整的预期结果 table)。如果个人只购买了 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"]
聚合结果,然后将其重塑为您需要的格式:
(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())
或另一种选择,使用 groupby.apply
并使用 iloc
:
(df1.groupby("Buyer ID", group_keys=False)
.apply(lambda g: g.iloc[[0,-1], :].assign(count = len(g)))
.drop_duplicates())