gpt4 book ai didi

python - Pandas groupby 根据另一列中的值(0 或 1)选择最后一行或倒数第二行

转载 作者:行者123 更新时间:2023-12-04 07:17:59 31 4
gpt4 key购买 nike

我有一个客户数据框。每个客户都有几个观察结果和变量,有些已经不再是客户。

我的问题如下:

我想按客户分组,如果客户仍然是客户,则选择最后一行,如果客户不再是客户,则选择倒数第二行。我有一个名为 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 truth value of a Series is ambiguous.使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

有什么方法可以按 CustomerID 进行分组,以流失列为条件,并仅获取流失==0 的客户的最后一行,如果流失==1,则只获取倒数第二行?

最佳答案

您需要将它们分成两个数据框 - 客户和非客户,并使用 last() 函数:

df.groupby(['CustomerID'],as_index=False).last()

关于python - Pandas groupby 根据另一列中的值(0 或 1)选择最后一行或倒数第二行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68681735/

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