删除 Pandas DataFrame 中重复超过 5 次的值
Removing values that repeat more than 5 times in Pandas DataFrame
我正在使用 pandas 处理 csv 文件。如果它们连续出现,我需要删除一些重复值。
我知道有一个重复函数可以删除第二次重复的任何值,而不管它们出现在哪里。
但是只有当列的值重复超过 5 个连续行时,我才必须删除数据。
例如,
1
1
3
1
1
1
1
1
2
这里我不想去掉B中最上面的两个1,只去掉连续重复5次的1。
关于我应该如何处理的任何指示?
应该这样做:
>> df = pd.Series([1,1,3,1,1,1,1,1,2])
>> df.groupby((df.shift() != df).cumsum())\
.filter(lambda x: len(x) < 5)
0 1
1 1
2 3
8 2
显示 elyase 的回答如何也适用于 DataFrame(不是系列)。
>> df = pd.DataFrame(np.array([[1,1,3,1,1,1,1,1,2]]).transpose(),columns = ["col"])
>> df.groupby((df["col"].shift() != df["col"]).cumsum()).filter(lambda x: len(x) < 5)
col
0 1
1 1
2 3
8 2
我正在使用 pandas 处理 csv 文件。如果它们连续出现,我需要删除一些重复值。 我知道有一个重复函数可以删除第二次重复的任何值,而不管它们出现在哪里。 但是只有当列的值重复超过 5 个连续行时,我才必须删除数据。 例如,
1
1
3
1
1
1
1
1
2
这里我不想去掉B中最上面的两个1,只去掉连续重复5次的1。 关于我应该如何处理的任何指示?
应该这样做:
>> df = pd.Series([1,1,3,1,1,1,1,1,2])
>> df.groupby((df.shift() != df).cumsum())\
.filter(lambda x: len(x) < 5)
0 1
1 1
2 3
8 2
显示 elyase 的回答如何也适用于 DataFrame(不是系列)。
>> df = pd.DataFrame(np.array([[1,1,3,1,1,1,1,1,2]]).transpose(),columns = ["col"])
>> df.groupby((df["col"].shift() != df["col"]).cumsum()).filter(lambda x: len(x) < 5)
col
0 1
1 1
2 3
8 2