如何过滤掉某个数据框列上的重复行

时间:2018-10-08 15:34:34

标签: python pandas

我有一个像这样的数据集:

                             price     is_peak is_valley
2018-08-25 01:47:00+00:00    0.041838  True    False
2018-08-25 05:21:00+00:00    0.041620  True    False
2018-08-25 09:11:00+00:00    0.041599  True    False
2018-08-25 12:37:00+00:00    0.041670  True    False

所有行都是is_peak = True或is_valley = True

我该如何过滤以删除其中的行: -前一行是峰值,当前行是峰值;要么 -前一行是山谷,当前行是山谷?

我尝试了以下操作:

merged = pd.concat([ peakT, valleyT ])

mask = (merged['is_valley'] & merged.shift(-1)['is_valley'] == False) | (merged['is_peak'] & merged.shift(-1)['is_peak'] == False)
merged[ mask ]

2 个答案:

答案 0 :(得分:2)

因为所有行都是is_peak = True或is_valley = True ,所以您可以使用ne搜索is_peak与上一行不同的地方:

df.loc[df.is_peak.ne(df.is_peak.shift())]

答案 1 :(得分:1)

回答您的问题,以便您理解逻辑:

df[~((df['is_peak'] & df['is_peak'].shift())  # Previous row is a peak and the current row is a peak.
     | (df['is_valley'] & df['is_valley'].shift()))]  # OR the previous row is a valley and the current row is a valley.

~字符使掩码反转,因此它返回不符合条件的所有内容。

条件的逻辑是((A和B)或(C和D))。请注意,&是按位AND,而|是按位OR。

相关问题