我試圖了解如何僅選擇資料框中位于兩個特定行之間的那些行。這些行在其中一列中包含兩個特定字串。我將用這個例子進一步解釋。
我有以下資料框:
String Value
-------------------------
0 Blue 45
1 Red 35
2 Green 75
3 Start 65
4 Orange 33
5 Purple 65
6 Teal 34
7 Indigo 44
8 End 32
9 Yellow 22
10 Red 14
“字串”列中只有一個“開始”實體和一個“結束”實體。我只想要在“String”列中包含“Start”和“Stop”的行之間的這個資料幀的行,所以我想生成這個輸出資料幀:
String Value
-------------------------
3 Start 65
4 Orange 33
5 Purple 65
6 Teal 34
7 Indigo 44
8 End 32
另外,我想保留我要保留的那些行的順序,因此保留“開始”、“橙色”、“紫色”、“藍綠色”、“靛藍”、“結束”的順序。
我知道我可以通過執行以下操作來索引這些特定列:
index_start = df.index[df['String'] == 'Start']
index_end = df.index[df['String'] == 'End']
但我不確定如何實際過濾掉不在這兩個字串之間的所有行。我怎樣才能在python中完成這個?
uj5u.com熱心網友回復:
如果兩個值都存在,您暫時將“字串”設定為索引:
df.set_index('String').loc['Start':'End'].reset_index()
輸出:
String Value
0 Start 65
1 Orange 33
2 Purple 65
3 Teal 34
4 Indigo 44
5 End 32
或者,使用isin(然后開始/結束的順序無關緊要):
m = df['String'].isin(['Start', 'End']).cumsum().eq(1)
df[m|m.shift()]
輸出:
String Value
3 Start 65
4 Orange 33
5 Purple 65
6 Teal 34
7 Indigo 44
8 End 32
uj5u.com熱心網友回復:
這應該足夠了,當您嘗試按索引定位行時, iloc[] 很有用,它的作業原理與串列中的切片相同。
index_start = df.index[df['String'] == 'Start']
index_end = df.index[df['String'] == 'End']
df.iloc[index_start[0]:index_end[0] 1]
更多資訊:https ://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html
uj5u.com熱心網友回復:
eq您可以使用 cummax和過濾器構建布爾掩碼:
out = df[df['String'].eq('Start').cummax() & df.loc[::-1, 'String'].eq('End').cummax()]
輸出:
String Value
3 Start 65
4 Orange 33
5 Purple 65
6 Teal 34
7 Indigo 44
8 End 32
uj5u.com熱心網友回復:
當您通過作業回傳索引值時:
df.iloc[index_start.item(): index_end.item()]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461327.html
