Python 基于两列的相反值匹配数据帧行?

Python 基于两列的相反值匹配数据帧行?,python,pandas,Python,Pandas,我正在尝试对位置代码之间的移动表进行计算,代码片段如下: origin destination age sex moves E06000019 E06000019 98 m 0 E06000019 E06000019 99 f 0 E06000019 E06000019 99 m 0 E06000019 E06000019 100 f 0 E06000019 E06000019 100 m 0 E06000019 E

我正在尝试对位置代码之间的移动表进行计算,代码片段如下:

origin     destination age sex  moves
E06000019   E06000019   98  m   0
E06000019   E06000019   99  f   0
E06000019   E06000019   99  m   0
E06000019   E06000019   100 f   0
E06000019   E06000019   100 m   0
E06000019   E06000020   0   f   0.3632
E06000019   E06000020   0   m   0.8249
E06000019   E06000020   1   f   1.1931
E06000019   E06000020   1   m   1.192
目的是找出任意两个位置之间的净流量,例如: (1) 将每一行与另一行匹配,其中年龄和性别相同,但起点/终点相反。然后(2)从第一行的移动次数中减去第二行的移动次数

在使用apply之前,我尝试过创建嵌套循环或定义函数:

df['col_3'] = df.apply(lambda x: f(x.col_1, x.col_2), axis=1) 
但在这两种情况下,我都很难理解如何为每一行创建匹配


有人知道我该怎么做吗?谢谢大家!

您给出了一个糟糕的示例:前4行具有相同的
原点
目的地
,因此它们不可避免地会相互匹配

话虽如此,您的问题可以通过自连接解决:

df.merge(df, how='left', suffixes=('', '_'),
         left_on=['origin', 'destination', 'age', 'sex'], 
         right_on=['destination', 'origin', 'age', 'sex']) \
    .assign(delta=lambda x: x['moves_'] - x['moves'])

您能否更改一个示例,以便有一些行符合该条件?我看不到任何一对具有相同年龄和性别的行。您的数据不符合您的逻辑-您可以添加预期的输出吗?