我有一個如下資料框:
start start_interaction
0 710000 224180000
1 710000 3445
2 715000 760000
3 755000 7603
4 755000 870000
.. ... ...
149 1840000 1935000
150 1840000 1980000
我有一個如下串列:
myList=[(710000,3445),(755000,7603) ,(77700,234)]
所以我需要洗掉元組中的第一個元素myList 應該在start列中并且我的元組中的第二個元素應該在start_interaction列中的行我想要的最終結果如下所示:
start start_interaction
0 710000 224180000
2 715000 760000
4 755000 870000
.. ... ...
149 1840000 1935000
150 1840000 1980000
所以請告訴我該怎么做。多謝。
uj5u.com熱心網友回復:
也許不是最優雅的,但它確實有效
df = df[[not(x) for x in [any([(row[1].start==x[0]) &(row[1].start_intercation==x[1]) for x in myList]) for row in df.iterrows()]]]
解釋:下一行檢查特定行“start”是否匹配元組的第一個元素,以及“start_interaction”是否匹配串列中任何元組的第二個物件。
[any([(row[1].start==x[0]) &(row[1].start_intercation==x[1]) for x in myList]]
我們為不滿足此條件的行過濾 df(在串列中的任何專案中都不匹配。我們通過過濾不滿足上述條件的行來實作 df:
df = df[[not(x) for x in cond]]
cond上面的條件在哪里
uj5u.com熱心網友回復:
您可以從串列中制作一個資料框,使用左鍵執行merge并indicator=True使用left_only指示器構建一個布爾陣列。最后切片原始資料框:
cols = list(df.columns) # subset here if needed
df2 = pd.DataFrame(myList, columns=cols)
mask = (df.merge(df2, on=cols, how='left', indicator=True)
['_merge'].eq('left_only').values # getting the values as the new index
# is no longer aligned
)
out = df[mask]
輸出:
start start_interaction
0 710000 224180000
2 715000 760000
4 755000 870000
149 1840000 1935000
150 1840000 1980000
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412601.html
標籤:
