python - 从 Pandas 数据帧创建边缘列表

标签 python pandas dataframe networkx

我想创建一个以权重作为属性的边列表(计算对出现的次数 - 例如,一对 a-b 在同一组中在一起的月份数)。
数据框包含特定团队中人员的月度快照(月度组没有重复)


月年
姓名


2020 年 6 月
一种

2020 年 6 月


2020 年 6 月
C

2020 年 7 月
一种

2020 年 7 月


2020 年 7 月
d


输出应如下所示(它是非定向的,因此 a-b 对与 b-a 相同):


节点 1
节点2
重量


一种

2


C
1

一种
C
1

一种
d
1


d
1


我设法使用以下名称组合创建了一个新的数据框:

df1 = pd.DataFrame(data=list(combinations(df['name'].unique().tolist(), 2)), columns=['node1', 'node2'])
现在我不确定如何迭代这个新数据框来填充权重。如何才能做到这一点?

最佳答案

假设每个 monthyear 中没有重复项group,你可以得到每个组内名称的所有2-组合,然后按节点名称分组以获得权重。

from itertools import combinations

def get_combinations(group):
    return pd.DataFrame([sorted(e) for e in list(combinations(group['name'].values, 2))], columns=['node1', 'node2'])

df = df.groupby('monthyear').apply(get_combinations)
这会给你一个中间结果:
            node1 node2
monthyear              
jul2020   0     a     b
          1     a     d
          2     b     d
jun2020   0     a     b
          1     a     c
          2     b     c
现在,计算重量:
df = df.groupby(['node1', 'node2']).size().to_frame('weight').reset_index()
最后结果:
  node1 node2  weight
0     a     b       2
1     a     c       1
2     a     d       1
3     b     c       1
4     b     d       1

关于python - 从 Pandas 数据帧创建边缘列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69216791/

相关文章:

python - Racket 程序的代码可视化工具

python - 什么时候创建python类属性

python - 通过 ssh 连接时从模块 numpy 导入时来自 python 的错误消息

python - 替换数据框的多个特定列中的值

python - 如何在数据框中添加由字母数字组成的递增值的列和另一列包含随机数的列

python - 如何按特定顺序更新 Pandas 数据帧特定列的多个条目?

python - 验证等于 33 : fails in R, 的三个立方体之和在 Python 中是否有效

python pandas groupby 关于分类变量

python - pandas read_table vs. read_csv vs. from_csv vs. read_excel 的性能差异?

python - 从一个 excel 添加带有合并单元格的标题并插入到另一个 excel Pandas