удалить дублированный список в python - PullRequest
0 голосов
/ 18 марта 2020

Я хочу удалить дубликаты списков в моих данных после использования stack(). Это пример

node1 node2  value
A     B      0.05
A     C      0.84
B     A      0.05
B     C      0.97
C     A      0.84
C     B      0.97

в

node1 node2  value
A     B      0.05
A     C      0.84
B     C      0.97

Спасибо

Редактировать: я прилагаю фотографию своих данных. Строки 2 и 174 имеют одинаковый узел, но разную позицию. Я хочу сохранить только одно взаимодействие (row2) Ps. значение не уникально. enter image description here

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Правильно, я новичок / новичок Python, но попробовал несколько разных вещей с кусочками из того, что я смог найти:

import pandas as pd
import numpy as np
df = pd.DataFrame({'node1':['A','A','B','B','C','C'],
                   'node2':['B','C','A','C','A','B'],
                   'value':[0.05,0.84,0.05,0.97,0.84,0.97]})
df = df[['value','node1','node2']]                                                         #Step 1: re-arange dataframe to work properly
df['value'] = df['value'].astype(str)                                                      #Step 2: float type (numbers) to string type
df = pd.DataFrame(np.sort(df.values, axis=1), columns=df.columns).drop_duplicates()        #Step 3: Sort and drop dups
df['value'] = df['value'].astype(float)                                                    #Step 4: string type back to float
df = df[['node1','node2','value']]                                                         #Step 5: re-arange dataframe back to starting positions
print(df)

Я использовал и хочу сослаться на:

  • Это Pandas документация по .to_string функции Panda
  • Это ТАК сообщение о перестановке столбцов, как я узнал np.sort не сдвигал заголовки.
  • Это ТАК сообщение для сортировки значений и удаления дубликатов.

Я уверен на 100%, что этот человек может быть сокращен до более плавного кода подходящим человеком. Надеюсь, это поможет в то же время!

0 голосов
/ 20 марта 2020

Наконец, я нахожу другие способы в Excel и решил ее, используя функцию if-else

node1 node2  value
A     B      0.05
A     C      0.84
B     A      0.05
B     C      0.97
C     A      0.84
C     B      0.97

Я добавляю новый столбец и сравниваю столбцы col1 и col2, которые имеют более высокое значение if(A2>B2,1,0)

node1 node2  value   cond
A     B      0.05    0
A     C      0.84    0
B     A      0.05    1
B     C      0.97    0
C     A      0.84    1
C     B      0.97    1

и я поменяю местами col1 и col2, которые cond = 1

node1 node2  value   cond
A     B      0.05    0
A     C      0.84    0
A     B      0.05    1
B     C      0.97    0
A     C      0.84    1
B     C      0.97    1

Наконец, я удаляю дубликаты в таблице

node1 node2  value
A     B      0.05
A     C      0.84
B     C      0.97

Спасибо всем за поиск путей ответа.

...