识别多个 pandas 数据框中的相似数据

Identifying similar data in a multiple pandas dataframe

我想处理 pandas 数据框中的值,该数据框根据数据框中的两列被识别为相同。为此,我找不到有效的方法。请看下面的代码解释。

下面的数据帧df显示了连接在a中的第一个节点和b中的第二个节点之间的分支信息。

df 的前两行显示连接的分支:(Nod1, Nod2) 和(Node2, Nod1)。这两个被认为是相同的分支,我想为它们都添加c中的值:0.15+0.152.

我认为我可以通过使用 zip 将这两个配对并使用这些对(与节点的顺序无关)来做到这一点。但是,如果没有循环,我无法为此目的找到一个好方法。

有没有办法达到我的目的?例如,只检查条目 'uniq' 列,而忽略其中的节点顺序以获取值 c.

a = ['Nod1', 'Nod2', 'Node3', 'Node1']
b = ['Nod2', 'Nod1', 'Node4', 'Node5']
c = [0.15, 0.152, 0.23, 0.24]

df = pd.DataFrame({'a': a, 'b':b, 'c':c})
print(df)

       a      b      c
0   Nod1   Nod2  0.150
1   Nod2   Nod1  0.152
2  Node3  Node4  0.230
3  Node1  Node5  0.240
#-------------------------------------------------------------
d = [j for j in zip(a, b)]
df['uniq'] = d
print (df)
       a      b      c            uniq
0   Nod1   Nod2  0.150    (Nod1, Nod2)
1   Nod2   Nod1  0.152    (Nod2, Nod1)
2  Node3  Node4  0.230  (Node3, Node4)
3  Node1  Node5  0.240  (Node1, Node5)

试试这个:

# get 'a' and 'b' into a state where we can group them
df['ab'] = df.apply(lambda _: str(sorted([_['a'], _['b']])), axis=1)

# groupby this new column and sum on c
df.groupby('ab')['c'].sum()

输出:

ab
['Nod1', 'Nod2']      0.302
['Node1', 'Node5']    0.240
['Node3', 'Node4']    0.230
Name: c, dtype: float64