识别多个 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
我想处理 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