我想处理来自熊猫数据框的值,该值基于数据框中的两列被确定为相同。我找不到达到此目的的有效方法。请参阅以下代码说明。
下面的数据帧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)
答案 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