gpt4 book ai didi

python - Pandas 数据框中的复杂选择

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

下面的数据集显示了每个客户在哪个月份激活了哪些产品。月份可以取多个值(1,2,3,...等),产品有很多(x,y,z等),product_active是二进制表示活跃状态。

cust_id month product  product_active
1234 1 x 1
1234 2 x 0
1234 1 y 0
1234 2 y 1

我如何选择从第 1 个月到第 2 个月从产品 x 切换到产品 y 的所有客户?我想对此进行概括,即能够选择从产品 a 切换到产品 b 的所有客户,从第 m1 个月到第 m2 个月。

最佳答案

好的,使用 .groupby() 和矢量解决方案可能有更 pythonic 的方法来执行此操作,但这里有一个解决方案将为 df 提供您正在寻找的结果。我根据您的数据假设您的产品事件列无关紧要。

#DF Setup
_______________________
col = ['cust_id', 'month', 'product', 'product_active']
data = [
(1234, 1, 'x', 1 ),
(1234, 2, 'x', 0 ),
(1235, 1, 'y', 0 ),
(1235, 2, 'y', 1 ),
(1236, 1, 'x', 1 ),
(1236, 2, 'y', 0 )]
df = pd.DataFrame(data, columns=col)

添加了一个额外的客户 (1236) 来模拟从 m1 到 m2 的产品变化 (x->y)。

#Solution
______________________
result_df = pd.DataFrame()

for i,row in df.iterrows():
if i == 0:
pass
elif df.loc[i-1,'cust_id'] == df.loc[i,'cust_id']:
if (df.loc[i-1,'month'] == 1) & (df.loc[i,'month'] == 2):
if (df.loc[i-1,'product'] == 'x') & (df.loc[i,'product'] == 'y'):
result_df = result_df.append(df.loc[i])

这是封装在函数中的通用解决方案:

def filter_function(month,p1,p2):
'''
month - month you wish to check for product change.
p1 - "From" product
p2 - "To" product
'''
result_df = pd.DataFrame()

for i,row in df.iterrows():
if i == 0:
pass
elif df.loc[i-1,'cust_id'] == df.loc[i,'cust_id']:
if (df.loc[i-1,'month'] == month-1) & (df.loc[i,'month'] == month):
if (df.loc[i-1,'product'] == p1) & (df.loc[i,'product'] == p2):
result_df = result_df.append(df.loc[i])
return result_df

filter_function(2,'x','y')

关于python - Pandas 数据框中的复杂选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054942/

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