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