Возможно ли преобразование из матрицы данных в матрицу? - PullRequest
0 голосов
/ 10 июня 2019

Я новичок в питоне, У меня огромный dataframe:

Person  OD
A       BS1
A       BS2
B       BS4
B       BS8
C       BS5
C       BS1
D       BS9
D       BS7
E       BS2
E       BS7
F       BS2
F       BS1
G       BS1
G       BS2

возможно ли преобразовать в матрицу происхождения-назначения (OD) в Python-пандах? Например, от BS1 до BS2 есть 2 человека (A и G), затем в матрице OD 2 человека в BS1-BS2.

мой ожидаемый результат:

O/D BS1 BS2 BS3 BS4 BS5 BS6 BS7 BS8 BS9
BS1     2                           
BS2 1                       1       
BS3                                 
BS4                             1   
BS5 1                               
BS6                                 
BS7                                 
BS8                                 
BS9                         1   

как это сделать? большое спасибо

1 Ответ

2 голосов
/ 10 июня 2019

Ниже приведено решение.

places = df["OD"].unique()
places.sort()
od_df = pd.DataFrame(df["OD"].values.reshape((-1, 2)), columns=["O", "D"])
od_matrix = od_df.groupby(["O", "D"]).size().unstack().reindex(index=places, columns=places)
od_matrix.fillna(0, downcast="infer", inplace=True)

Вы также можете использовать pd.pivot_table и заменить четвертую строку на

od_matrix = pd.pivot_table(od_df, index="O", columns="D", aggfunc="size").reindex(index=places, columns=places)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...