我有一個熊貓數據框,它具有在其第一次觀察點索引的窗口/鏈字符串觀察值。該窗口的大小可變。對於這個例子,我們可以說他們是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