gpt4 book ai didi

python - 如何识别数据框列中的连续重复值?

转载 作者:行者123 更新时间:2023-12-04 14:06:28 26 4
gpt4 key购买 nike

所以我想弄清楚如何在 python 中识别数据框列中的连续重复值,然后能够为我正在寻找的连续重复值的数量设置一个数字。我将在这里进一步解释。

我有以下数据框:

DateTime                 Value         
-------------------------------
2015-03-11 06:00:00 1
2015-03-11 07:00:00 1
2015-03-11 08:00:00 1
2015-03-11 09:00:00 1
2015-03-11 10:00:00 0
2015-03-11 11:00:00 0
2015-03-11 12:00:00 0
2015-03-11 13:00:00 0
2015-03-11 14:00:00 0
2015-03-11 15:00:00 0
...

现在我有以下问题:在“值”列中,是否存在“2”个或多个连续“0”值的实例?是的!现在我想返回一个“True”。

现在我有了这个数据框:

DateTime                 Value         
-------------------------------
2015-03-11 06:00:00 1
2015-03-11 07:00:00 1
2015-03-11 08:00:00 0
2015-03-11 09:00:00 0
2015-03-11 10:00:00 1
2015-03-11 11:00:00 0
2015-03-11 12:00:00 0
2015-03-11 13:00:00 0
2015-03-11 14:00:00 1
2015-03-11 15:00:00 1
...

现在我有以下问题:在“值”列中,是否存在“3”个或更多连续“0”值的实例?是的!现在我想返回一个“True”。

当然,如果答案是“否”,那么我想返回一个“假”

这在 python 中如何完成?这个过程叫什么?如何设置它以便更改要查找的连续值的数量?

最佳答案

首先,您可以使用 .shift() 创建一个与您的列 Value 具有相同值的新列。比

df["Value_shif"] = df["Value"].shift()

输出:

              DateTime  Value  Value_shif 
0 2015-03-11 06:00:00 1 NaN
1 2015-03-11 07:00:00 1 1.0
2 2015-03-11 08:00:00 0 1.0
3 2015-03-11 09:00:00 1 0.0

你可以比较它们并得到真/假:

df["Value"] == df["Value_shif"]

输出:

0    False
1 True
2 False
3 False

比对重复值的个数求和:

df["count"] = (df["Value"] == df["Value_shif"]).cumsum()

cumsum() 会将 True 视为 1 并将 False 视为 0

输出:

              DateTime  Value  Value_shif  count
0 2015-03-11 06:00:00 1 NaN 0
1 2015-03-11 07:00:00 1 1.0 1
2 2015-03-11 08:00:00 0 1.0 1
3 2015-03-11 09:00:00 1 0.0 1

如果 Sum 大于 1,则您有连续的重复值。

获得此信息后,您可以在特定条件下过滤数据帧,检查特定 是否出现 number_of_times 大于特定数量。

def check(dataframe, value, number_of_times):
"""
Check for condition
"""
df = dataframe.copy()
df = df[df['Value'] == value]
if df["count"].max() >= number_of_times:
return True
else:
return False

print(check(df, 1, 1))
True

print(check(df, 0, 3))
False

您需要检查特定的边界条件,以确保一切都按预期进行。 shift() 的问题在于它创建 NaN 作为第一个值并从列中删除最后一个值...

关于python - 如何识别数据框列中的连续重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68288515/

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