gpt4 book ai didi

python - 根据条件计算组内共享元素的数量

转载 作者:行者123 更新时间:2023-12-02 02:33:29 25 4
gpt4 key购买 nike

我在使用 Pandas 查询时遇到一些困难,希望得到一些帮助。我正在使用的 DataFrame 类似于以下内容:

data = {
"cusID": ["001", "002", "003", "004", "001", "003", "002", "001", "003", "002", "004"],
"productID": ["A", "A", "A", "A", "B", "B", "C", "D", "D", "E", "E"]
}
df = pd.DataFrame(data)
print(df)

cusID productID
0 001 A
1 002 A
2 003 A
3 004 A
4 001 B
5 003 B
6 002 C
7 001 D
8 003 D
9 002 E
10 004 E

我想要获得购买2个或更多相同产品的客户的新DataFrame。鉴于上面的示例,我正在寻找的输出 DataFrame 如下:

    left_cusID right_cusID result
0 001 003 3
1 002 004 2

结果列等于两个客户之间共享产品的数量。

另请注意,对于此问题,我们假设客户不能购买多个相同的产品 ID。

在将其发布到此处之前,我想了一会儿这个问题,但我找不到适当的步骤/逻辑来解决它。有一次,我认为我可以将表与其自身交叉连接,以获得左/右 cusID 的所有组合,但我也很快陷入了困境。任何帮助将不胜感激。

最佳答案

这非常适合

s = pd.crosstab(df.cusID, df.productID)
s = s.dot(s.T)
s = s.astype(float)
s.values[np.tril_indices(s.shape[0], 0)] = np.nan

s
Out[66]:
cusID 1 2 3 4
cusID
1 NaN 1.0 3.0 1.0
2 NaN NaN 1.0 2.0
3 NaN NaN NaN 1.0
4 NaN NaN NaN NaN


s.where(s.ne(1)).stack()
Out[68]:
cusID cusID
1 3 3.0
2 4 2.0
dtype: float64

关于python - 根据条件计算组内共享元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64689296/

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