簡體   English   中英

如果值存在,則從DataFrame中刪除

[英]Delete from DataFrame if value exists

我有一個看起來像這樣的數據框:

import pandas as pd
df = pd.DataFrame(data=[[1, 'ABC'], [2, 'ABC'], [3, 'ABCDEF'], [1, 'ABCDEF']], columns=['id', 'marker'])

我實際上是在熊貓中嘗試執行此SQL語句。

delete #table
from #table a, #table b
where a.id = b.id
and a.marker = b.marker + 'DEF'

這將有效擺脫數據幀中的最后一行。 知道我該怎么做嗎?

編輯:

為了澄清以上內容,可以說數據如下:

   id  marker
0   1     ABC
1   2     ABC
2   3  ABCDEF
3   1  ABCDEF
4   4  ABCDEF

答案應該是

   id  marker
0   1     ABC
1   2     ABC
2   3  ABCDEF
4   4  ABCDEF

(1,'ABCDEF')被省略,因為存在(1,'ABC'),這是SQL語句將有效執行的操作(即,刪除ID相等且標記附加了'DEF'的所有行)。 如果ID X僅顯示“ ABCDEF”,它將保留它,但是如果ID Y同時具有“ ABC”和“ ABCDEF”,它將刪除“ ABCDEF”

這是獲得所需內容的一種解決方案。 我稍稍更改了數據框,添加了[2, 'ABCDEF']以演示該代碼將保留ABC而不管是先出現ABCDEF還是ABC

df = pd.DataFrame(data=[[1, 'ABCDEF'], [2, 'ABC'], [2, 'ABCDEF'], [3, 'ABCDEF'], [1, 'ABC']], columns=['id', 'marker'])
df
id  marker
0   1   ABCDEF
1   2   ABC
2   2   ABCDEF
3   3   ABCDEF
4   1   ABC

lst = df.values.tolist()
list_tuples = [tuple(l) for l in lst]
newdata = {}
for key,value in list_tuples:
    newdata.setdefault(key, []).append(value)
newdata = {k:sorted(v) if len(v) > 1 else v for k,v in newdata.items()}
create_dataframe = {k:v[0] for k,v in newdata.items()}

df2 = pd.DataFrame(list(create_dataframe.items()), columns=['id', 'marker'])
df2.index = range(len(df2))
df2

id  marker
0   1   ABC
1   2   ABC
2   3   ABCDEF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM