识别多个熊猫数据框中的相似数据

时间:2019-10-07 14:15:07

标签: python pandas dataframe selection

我想处理来自熊猫数据框的值,该值基于数据框中的两列被确定为相同。我找不到达到此目的的有效方法。请参阅以下代码说明。

下面的数据帧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)

1 个答案:

答案 0 :(得分:0)

尝试一下:

# 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