如何匹配熊猫数据框同一列中的两个值

时间:2019-06-06 04:34:22

标签: python pandas dataframe

我有以下两个数据帧

PD  106352  00253   01-02-2018  0.73
PD  108181  00253   20-12-2017  13.91
PD  108222  00253   01-08-2017  -2,227.50
PD  108224  00253   01-08-2017  -4,455.00
PD  108848  00253   25-07-2017  -2,342.13
PD  108852  00253   25-06-2018  1,764.16
PD  108860  00253   12-07-2017  -3,144.81
PD  108871  00253   01-07-2017  -144.17
PD  109455  00253   01-07-2017  -271.25
PD  109472  00253   04-07-2017  -389.00

PV  73006   00253   01-09-2017  16,956.25
PV  73006   00253   01-09-2017  2,227.50
PV  73006   00253   01-09-2017  2,227.50
PV  75499   00253   01-07-2017  30,351.42
PV  75645   00253   03-07-2017  34,468.29
PV  82899   00253   12-12-2017  2,342.40

我尝试制作两个数据帧第五列的列表,将它们进行比较,如果找到匹配项,则取出索引并使用loc设置结果列。但是没有成功。

我想比较两个数据帧的第五列,并忽略符号匹配绝对值,如果找到1:1匹配,我想添加一列并将其注释为nill,如果找到1:n匹配,我要注释其中只有1:1为零,而结果栏中的其他则为空白

我想做下面的事情

PD  108222  00253   01-08-2017  -2,227.50 Nill
PV  73006   00253   01-09-2017  2,227.50  Nill
PV  73006   00253   01-09-2017  2,227.50

1 个答案:

答案 0 :(得分:0)

请看下面的代码,这是我可以很快提出的,我认为它应该可以解决您的问题。

import pandas as pd

#creating data
data_a = pd.read_csv('data_a.csv', sep=',', header=None)
data_a[4]=data_a[4].abs()
data_b = pd.read_csv('data_b.csv', sep=',', header=None)

#converting to list
a=data_a[4].tolist()
b=data_b[4].tolist()


#Removing duplicates and preserving the order so you get 1:1 and not 1:N
b1=[el for i, el in enumerate(b) if el not in b[:i]]

#getting indices of matching values in tow datasets
abc=[i for i, item in enumerate(a) if item in b1]
deg=[i for i, item in enumerate(b1) if item in a]

#Creating blank new column
data_a[5]=''
data_b[5]=''

#Filling matching locations with Nill
data_a.iloc[abc,5] = 'Nill'
data_b.iloc[deg,5] = 'Nill'