我有一个与客户的数据框。每个客户都有一些观察结果和变量,其中一些不再是客户。
我的问题如下:
我想按客户分组,如果客户仍然是客户,则选择最后一行;如果客户不再是客户,则选择倒数第二行。
对于客户的所有观察,我有一个名为 churned 的列,如果客户已流失(不再是客户),则为 1;如果仍然是客户,则为 0。
我知道我可以选择最后一行 (-1) 或倒数第二行 (-2),如下所示:
df = df.groupby(['CustomerID'],as_index=False).nth(-1).reset_index()
这似乎也有效,尽管顺序不同:
df = df.groupby(['CustomerID']).apply(lambda x: x.iloc[-1])
我一直在尝试在 lambda 函数中使用 if else 语句,如下所示:
df = df.groupby(['CustomerID'],as_index=False).apply(lambda x: x.iloc[-2] if x['churned']==1 else x.iloc[-1]).reset_index()
但我得到 ValueError: The true value of a Series is ambigacy.使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
有没有什么方法可以按 CustomerID 进行分组,以 churned 列为条件,并仅获取 churned==0 的客户的最后一行,如果 churned==1 则获取倒数第二行?
您需要将它们分为两个数据框 - 客户和非客户,并使用 last() 函数:
df.groupby(['CustomerID'],as_index=False).last()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)