汇总大熊猫的边缘

时间:2017-12-21 00:05:00

标签: python pandas

有一个数据帧,表示在节点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

最好的方法是什么?

2 个答案:

答案 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的解决方案表现得更差,这非常好:)