2015-03-04 4 views
0

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

uid | name | fuID | friendName | 
1 | Bob  | f1 | Jimmy  | 
1 | Bob  | f2 | Frank  | 
1 | Bob  | f3 | Sal   | 
2 | Mark | f4 | Leon  | 
2 | Mark | f1 | Jimmy  | 
2 | Mark | f5 | Artie  | 
3 | Steve | f1 | Jimmy  | 
3 | Steve | f5 | Artie  | 
3 | Steve | f6 | Samuel  | 

Цель состоит в том, чтобы найти все общие друзья, другими словами, я хотел бы быть в состоянии найти все friendName/fuID, которые имеют более одного соединения и какие эти соединения. Например, Джимми подключен к Бобу, Марку и Стиву.

Я могу создать группу достаточно легко ... connections.groupby («uid») и предположил, что существует способ сравнить их с группами, чтобы найти общие предметы, но я ударил стену. Я начал создавать комплекс для цикла, чтобы перебирать группы и просто останавливался, зная, что должен быть простой способ сделать это, что я просто отсутствую.

Любая помощь была бы принята с благодарностью.

+0

Возможно, вам лучше использовать networkx, чтобы найти клики, а не панды – EdChum

+0

спасибо за предложение. Я играл с этим сейчас, и это, безусловно, помогает на фронте визуализации. Мне не пришло в голову использовать networkx для исследовательской части проекта. – Thatch

ответ

0

Ну, ты почти там -

fdfg = connections.groupby('friendName') 
for k, v in fdfg: 
    if len(v) > 1: 
     print k 
     print v.name 
Artie 
5  Mark 
7 Steve 
Name: name, dtype: object 
Jimmy 
0  Bob 
4  Mark 
6 Steve 
Name: name, dtype: object 

Там, вероятно, еще более лаконичным способ сделать это.

+0

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