gpt4 book ai didi

python - 为网络图重构 pandas 数据框

转载 作者:行者123 更新时间:2023-12-02 01:53:09 24 4
gpt4 key购买 nike

我正在构建一个 pandas 数据框架来制作网络图。我的数据框目前如下所示:

Group1 Group2 Group3 Asset
A A A MI
A A A JI
A A A MI
A A A JI
A A A MI
A A B MI
A A C MI
A A C PA
A A C MI
A A C PA
A A C MI
A A C PA
A A C MI
A A C PA
A A C MI

我想操纵它看起来像这样:

Source Target Weight
MI JI 1
MI MI 1
MI PA 1
JI MI 1
PA MI 1

本质上,我想将第 1、2 和 3 组的每个唯一配对的 Assets 列分成 2 列,每个可能的组合。配对的第一部分将构成源列,第二部分将构成配对将构成目标列。对于这个最小的示例,只有第 3 组发生变化。权重列代表各个 Assets 的总配对总和。

有人可以帮我指出正确的方向吗?任何帮助将不胜感激!

这里是一些生成 df 的示例代码:

df = pd.DataFrame({'Group1': ['A','A','A','A', 'A','A','A', 'A','A','A', 'A','A','A', 'A','A'],
'Group2': ['A','A','A','A', 'A','A','A', 'A','A','A', 'A','A','A', 'A','A'],
'Group3': ['A','A','A','A','A','B','C','C','C','C','C','C','C','C','C'],
'Asset': ['MI','JI','MI','JI','MI','MI','MI','PA','MI','PA','MI','PA','MI','PA','MI']

})

最佳答案

import itertools as it
import pandas as pd

df = pd.DataFrame({'Group1': ['A','A','A','A', 'A','A','A', 'A','A','A', 'A','A','A', 'A','A'],
'Group2': ['A','A','A','A', 'A','A','A', 'A','A','A', 'A','A','A', 'A','A'],
'Group3': ['A','A','A','A','A','B','C','C','C','C','C','C','C','C','C'],
'Asset': ['MI','JI','MI','JI','MI','MI','MI','PA','MI','PA','MI','PA','MI','PA','MI']
})

def assets_pairs(assets_group):
unique_assets = set(assets_group)
if len(unique_assets) == 1:
x = assets_group.iat[0] # get the only unique asset
pairs = [[x, x]]
else:
pairs = it.permutations(unique_assets, r=2) # get all the unique pairs without repeated elements
return pd.DataFrame(pairs, columns=['Source', 'Target'])

df_pairs = (
df.groupby(['Group1', 'Group2', 'Group3'])['Asset']
.apply(assets_pairs) # create asset pairs per group
.groupby(['Source', 'Target'], as_index=False) # compute the weights by
.agg(Weights = ('Source', 'size')) # counting the unique ('Source', 'Target') pairs
)

>>> df_pairs

Source Target Weights
0 JI MI 1
1 MI JI 1
2 MI MI 1
3 MI PA 1
4 PA MI 1

关于python - 为网络图重构 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69957344/

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