我有一个熊猫数据框,它具有在其第一次观察点索引的窗口/链字符串观察值。该窗口的大小可变。对于这个例子,我们可以说他们是4条观察链。我想知道如何最有效地消除某些值,如果他们在窗口中的任何位置都有特定的观测值,知道如果第n个窗口以我正在查找的值开始,我知道我可以将其删除,并且三个窗口在它之前,因为它们将在其窗口中稍后包含相同的值。窗口可能包含我想要过滤的值的多个实例。以下是一些示例数据。从一系列简单事件开始,ser:在熊猫数据框中有效过滤窗口化观察值(如果它们包含特定值)
import pandas as pd
ser = pd.Series(['a','b','c','d','e','f','g','h','i','j','k'])
>>> ser
0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h
8 i
9 j
10 k
然后我把它变成一个数据帧,其中每一行都是一个有n个观测值的窗口。在这里,n == 4
df = pd.concat([ser.shift(-x) for x in range(4)], axis=1)
>>> df
0 1 2 3
0 a b c d
1 b c d e
2 c d e f
3 d e f g
4 e f g h
5 f g h i
6 g h i j
7 h i j k
8 i j k NaN
9 j k NaN NaN
10 k NaN NaN NaN
现在我想摆脱所有值 'F' 的任何地方,即各行的:
desired_output
0 1 2 3
0 a b c d
1 b c d e
6 g h i j
7 h i j k
8 i j k NaN
9 j k NaN NaN
10 k NaN NaN NaN
我想避免搜索整个数据框,因为它只包含第一列的重复,而我对n的值可能有点长。在这个例子中,删除以'c','d','e'和'f'开头的列的最好方法是知道它们都会在某处包含'f'。之后,我将每行中的所有字符串合并为一个值,但似乎应该更容易在此阶段操纵数据,其中所有内容都位于不同的列中。这是熊猫0.16.0,必须在python 2.76和python 3.4上工作。谢谢!
谢谢,但是这不是仍在搜索整个数据框? – Alex
我编辑了解决方案,以避免整个搜索! –
此解决方案引发“位置索引器超出界限”错误。您的原始答案(在编辑之前)有效,但它会搜索整个数据框。 – Alex