簡體   English   中英

我如何提取 dataframe 的所有行,其中有一個對稱的 [column A = i, column B = j] 和 [column A = j, column B = i]

[英]how can i extract all the rows of the dataframe where there is a symetrical [column A = i, column B = j ] and [column A = j, column B = i]

我正在處理圖形問題,並希望刪除兩個節點 A 和 B 連接兩次的數據

甲乙

B對A。

你能幫我嗎?

我有一個 dataframe 數據

A列 B列
值 1 值 2
值 1 值 3
值 2 值 3
值 2 值 1

我想從所有滿足這兩個條件的情況中提取 dataframe

A列 B列
價值我 值 j
值 j 價值我

在我們的例子中:

A列 B列
值 1 值 2
值 2 值 1

非常感謝 !

我嘗試循環並創建列表,但這很耗時而且不太美觀:

`l=[] indexes=[] for i in data['aretes']:

l.append([list(data[data['aretes']==i]['column A'])[0],list(data[data['aretes']==i]['column B'])[0]])

索引 = 0

對於 l 中的 j:

index+=1

h=[j[1],j[0]]

if h in l:

    indexes.append(index)`

如果要提取 dataframe 中重復的所有行,我將首先創建節點集的字符串表示形式以創建排序 ID:

df["id"] = df.apply(lambda x: str(set([x['a'],x['b']])),axis=1)

然后你可以使用重復的 function 根據id刪除所有不重復的行:

df[df.duplicated(["id"],keep=False)]

結果:

    a           b           id
0   Value 1     Value 2     {'Value 1', 'Value 2'}
1   Value 2     Value 1     {'Value 1', 'Value 2'}

將您的列轉換為set ,然后刪除重復項:

>>> df[df[['Column A', 'Column B']].agg(set, axis=1).duplicated(keep=False)]
  Column A Column B
0  value 1  value 2
3  value 2  value 1

注意事項:如果您有 2 個實例(值 1,值 2),它們將被提取。 您還可以使用NetworkX找到解決方案。

暫無
暫無

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

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