gpt4 book ai didi

python - Pandas 数据框到邻接矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:55 24 4
gpt4 key购买 nike

我有一个以下形式的 pandas 数据框:

index | id    | group
0 | abc | A
1 | abc | B
2 | abc | B
3 | abc | C
4 | def | A
5 | def | B
6 | ghi | B
7 | ghi | C

我想将其转换为加权图/邻接矩阵,其中节点是“组”,权重是每对组共享 ID 的总和:

权重是每个 id 的组对组合的计数,因此:

AB = 'abc' indexes (0,1),(0,2) + 'def' indexes (4,5) = 3

AC = 'abc' (0,3) = 1

BC = 'abc' (2,3), (1,3) + 'ghi' (6,7) = 3

结果矩阵将是:

    A  |B  |C
A| 0 |3 |1
B| 3 |0 |3
C| 1 |3 |0

目前我这样做效率很低:

f = df.groupby(['id']).agg({'group':pd.Series.nunique}) # to count groups per id
f.loc[f['group']>1] # to get a list of the ids with >1 group

# i then for loop through the id's getting the count of values per pair (takes a long time).

这是一种粗略的破解方法,我确信必须有一种使用 groupby 或 crosstab 的替代方法,但我无法弄清楚。

最佳答案

您可以使用以下内容:

df_merge = df.merge(df, on='id')
results = pd.crosstab(df_merge.group_x, df_merge.group_y)
np.fill_diagonal(results.values, 0)
results

输出:

group_y  A  B  C
group_x
A 0 3 1
B 3 0 3
C 1 3 0

注意:你的结果和我的结果 C-B 和 B-C 之间的差异是三个而不是两个,这是由于 B-abc 索引行 1 和 2 的重复记录造成的。

关于python - Pandas 数据框到邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49429594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com