从 pandas 数据框创建边列表
Creating an edge list from a pandas dataframe
我想创建一个以权重作为属性的边列表(计算对出现的次数 - 例如,对 a-b 在同一组中在一起有多少个月)。
数据框包含特定团队中人员的每月快照(每月组中没有重复项)
monthyear
name
jun2020
a
jun2020
b
jun2020
c
jul2020
a
jul2020
b
jul2020
d
输出应如下所示(它是非定向的,因此 a-b 对与 b-a 相同):
node1
node2
weight
a
b
2
b
c
1
a
c
1
a
d
1
b
d
1
我设法使用以下名称组合创建了一个新数据框:
df1 = pd.DataFrame(data=list(combinations(df['name'].unique().tolist(), 2)), columns=['node1', 'node2'])
现在我不确定如何迭代这个新数据框来填充权重。如何做到这一点?
假设每个monthyear
组内没有重复,则可以得到每个组内所有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
我想创建一个以权重作为属性的边列表(计算对出现的次数 - 例如,对 a-b 在同一组中在一起有多少个月)。
数据框包含特定团队中人员的每月快照(每月组中没有重复项)
monthyear | name |
---|---|
jun2020 | a |
jun2020 | b |
jun2020 | c |
jul2020 | a |
jul2020 | b |
jul2020 | d |
输出应如下所示(它是非定向的,因此 a-b 对与 b-a 相同):
node1 | node2 | weight |
---|---|---|
a | b | 2 |
b | c | 1 |
a | c | 1 |
a | d | 1 |
b | d | 1 |
我设法使用以下名称组合创建了一个新数据框:
df1 = pd.DataFrame(data=list(combinations(df['name'].unique().tolist(), 2)), columns=['node1', 'node2'])
现在我不确定如何迭代这个新数据框来填充权重。如何做到这一点?
假设每个monthyear
组内没有重复,则可以得到每个组内所有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