我有以下数据集:
import pandas as pd
from itertools import combinations
d = {'Order_ID': ['001', '001', '002', '003', '003', '003', '004', '004'],
'Products': ['Apple', 'Pear', 'Banana', 'Apple', 'Pear', 'Banana', 'Apple', 'Pear'],
'Revenue': [15, 10, 5, 25, 15, 10, 5, 30]}
df = pd.DataFrame(data=d)
df
产出:
Order_ID Products Revenue
0 001 Apple 15
1 001 Pear 10
2 002 Banana 5
3 003 Apple 25
4 003 Pear 15
5 003 Banana 10
6 004 Apple 5
7 004 Pear 30
我希望实现的是一个数据集,其中包含了所有交易中可能出现的交易对的组合,获取它们的频率和总收入的累积总和。应该看起来像这样:
d = {'Groups': ['(Apple, Pear)', '(Banana, Apple)', '(Banana, Pear)'],
'Frequency': [3, 1, 1],
'Revenue': [100, 35, 40]}
df2 = pd.DataFrame(data=d)
df2
这将返回:
Groups Frequency Revenue
0 (Apple, Pear) 3 100
1 (Banana, Apple) 1 35
2 (Banana, Pear) 1 40
我能获得成对项及其频率,但是我无法想出如何在我使用的groupby语句中获取收入部分。
def find_pairs(x):
return pd.Series(list(combinations(set(x), 2)))
df_group = df.groupby('Order_ID')['Products'].apply(find_pairs).value_counts()
df_group
我需要在将“Products”应用于函数后添加另一个条件,即通过find_pairs函数创建的“新”组对“Revenue”进行总和。收入必须是每个成对组的总和,也就是说,每次重复出现该组时,都要将产品收入加到该组的累计总和中。