![](/img/trans.png)
[英]Generate new matrix from A containing the average value of A rows for each column if B[i, j] == 1 where B is an adjacency matrix
[英]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.