gpt4 book ai didi

python - 根据 Pandas 的开始日期按组检查所有条件是否为真

转载 作者:行者123 更新时间:2023-12-04 00:55:07 24 4
gpt4 key购买 nike

我有一个如下所示的数据框:

pd.DataFrame({'a': ['cust1', 'cust1', 'cust1', 'cust2', 'cust2', 'cust3', 'cust3', 'cust3', 'cust4', 'cust4'],
'year': [2017, 2018, 2019, 2018, 2019, 2017, 2018, 2019, 2018, 2019],
'cond': [True, True, False, True, True, True, True, True, True, True],
'startDate': [2017, 2017, 2017, 2018, 2018, 2017, 2017, 2017, 2017, 2017]})

endYear = 2019

a year cond startDate
0 cust1 2017 True 2017
1 cust1 2018 True 2017
2 cust1 2019 False 2017
3 cust2 2018 True 2018
4 cust2 2019 True 2018
5 cust3 2017 True 2017
6 cust3 2018 True 2017
7 cust3 2019 True 2017
8 cust4 2018 True 2017
9 cust4 2019 True 2017

对于“a”列中的每个组,我需要检查“cond”列在“startDate”列(每个组可以不同)和“endYear”之间的所有年份是否具有“True”值。

我生成的数据框应如下所示:

       a  final_score
0 cust1 False
1 cust2 True
2 cust3 True
3 cust4 False

逻辑:

cust1 = False,因为 2019 年值 = False

cust2 = True,开始日期为 2018 年,对于 2018 年至 2019 年之间的所有年份,'cond' 为 True

cust3 = True,开始日期为 2017 年,对于 2017 年至 2019 年之间的所有年份,'cond' 为 True

cust4 = False as startDate 2017 但没有 2017 年的数据所以不满足条件

最佳答案

IIUC,您可以使用 reindex 按组填充空白年份,然后检查 True:

print (df.groupby("a").apply(lambda d: d.set_index("year").reindex(range(d["startDate"].min(), endYear+1))["cond"].eq(True).all()))

a
cust1 False
cust2 True
cust3 True
cust4 False
dtype: bool

关于python - 根据 Pandas 的开始日期按组检查所有条件是否为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63099914/

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