Идентификация похожих данных в фрейме данных нескольких панд - PullRequest
0 голосов
/ 07 октября 2019

Я бы хотел поработать над значением из фрейма данных pandas, которые определены как одинаковые на основе двух столбцов в фрейме данных. Я не мог найти эффективный способ для этой цели. Пожалуйста, см. Следующее объяснение кода.

В кадре данных df ниже показана информация о ветвях, которые связаны между первым узлом в a и вторым узлом в b.

В первых двух строках df показана ветвь, связанная с: (Nod1, Nod2) и (Node2, Nod1). Эти два считаются одними и теми же ветвями, и я хочу добавить значение c для них обоих: 0,15 + 0,152.

Я подумал, что смогу сделать это, соединив эти два с помощью zip иработать с этими парами (не имеет значения последовательность узлов). Однако я не смог бы найти хороший путь для этой цели без петли.

Есть ли способ достичь моей цели? например, проверяя только запись в столбце «uniq», но игнорируя последовательность узлов в нем, чтобы получить значение c.

a = ['Nod1', 'Nod2', 'Node3', 'Node1']
b = ['Nod2', 'Nod1', 'Node4', 'Node5']
c = [0.15, 0.152, 0.23, 0.24]

df = pd.DataFrame({'a': a, 'b':b, 'c':c})
print(df)

       a      b      c
0   Nod1   Nod2  0.150
1   Nod2   Nod1  0.152
2  Node3  Node4  0.230
3  Node1  Node5  0.240
#-------------------------------------------------------------
d = [j for j in zip(a, b)]
df['uniq'] = d
print (df)
       a      b      c            uniq
0   Nod1   Nod2  0.150    (Nod1, Nod2)
1   Nod2   Nod1  0.152    (Nod2, Nod1)
2  Node3  Node4  0.230  (Node3, Node4)
3  Node1  Node5  0.240  (Node1, Node5)

1 Ответ

0 голосов
/ 07 октября 2019

Попробуйте это:

# get 'a' and 'b' into a state where we can group them
df['ab'] = df.apply(lambda _: str(sorted([_['a'], _['b']])), axis=1)

# groupby this new column and sum on c
df.groupby('ab')['c'].sum()

Вывод:

ab
['Nod1', 'Nod2']      0.302
['Node1', 'Node5']    0.240
['Node3', 'Node4']    0.230
Name: c, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...