有一个数据帧,表示在节点A,B和C之间有定向边缘的网络。我想对节点之间的流量求和,以测量节点之间连接的强度。以下是我的df ..
To From Flow
A A 1
A B 4
A C 2
B A 5
B B 2
B C 6
C A 3
C B 5
C C 2
以下是我想要的内容。
A A 1
B B 2
C C 2
A B 9
A C 5
B C 11
最好的方法是什么?
答案 0 :(得分:1)
这是解决这个问题的一种方法。
df["Node 1"] = df[["To","From"]].min(axis=1)
df["Node 2"] = df[["To","From"]].max(axis=1)
result = df.groupby(["Node 1","Node 2"], as_index=False)["Flow"].sum()
前两行只为组创建一致的顺序。第三行只是将组合在一起,即存在一致的分组。
答案 1 :(得分:1)
为了它的价值,我尝试了两种稍微不同的方法:
1
data = pd.DataFrame(data={"To": ["A", "A", "A", "B", "B", "B", "C", "C", "C"],
"From": ["A", "B", "C", "A", "B", "C", "A", "B", "C"],
"Flow": [1, 4, 2, 5, 2, 6, 3, 5, 2]})
data[["To", "From"]] = data[["To", "From"]].apply(sorted, axis=1)
data.groupby(by=["To", "From"], as_index=False).sum()
2
data = pd.DataFrame(data={"To": ["A", "A", "A", "B", "B", "B", "C", "C", "C"],
"From": ["A", "B", "C", "A", "B", "C", "A", "B", "C"],
"Flow": [1, 4, 2, 5, 2, 6, 3, 5, 2]})
swap = data.To < data.From
data.loc[swap, ["To", "From"]] = data.loc[swap, ["From", "To"]].values
data.groupby(by=["From", "To"], as_index=False).sum()
两者都比Gabriel A的解决方案表现得更差,这非常好:)