迭代两个数据框,比较并更改pandas或pyspark中的值

时间:2019-09-23 18:52:46

标签: pandas pyspark pyspark-dataframes

我正尝试在大熊猫中锻炼。

我有两个数据框。如果比较成功,我需要比较两个数据帧之间的几列,并更改第一个数据帧中一列的值。

数据框1:

Article    Country   Colour    Buy
Pants      Germany   Red       0
Pull       Poland    Blue      0

最初,我所有文章的标志“购买”均设为零。 我的数据框2看起来是:

Article    Origin    Colour   
Pull       Poland    Blue    
Dress      Italy     Red

我想检查商品,国家/地区和颜色列是否匹配(因此请检查是否可以从数据框2中的数据框1中找到每件商品),如果可以,我要将标记“购买”放置到1。

我尝试使用pyspark遍历两个数据框,但是pyspark daatframes不可迭代。 我曾考虑过要在熊猫中这样做,但是在迭代过程中更改值显然是个坏习惯。

pyspark或pandas中的哪个代码可以完成我需要做的事情?

谢谢!

1 个答案:

答案 0 :(得分:1)

merge,其中包含一个indicator,然后是map个值。确保在右框中的合并键上使用drop_duplicates,以便合并结果的长度始终与原始长度相同,然后重命名,以便在合并后不再重复相同的信息。无需具有0s的预定义列。

df1 = df1.drop(columns='Buy')
df1 = df1.merge(df2.drop_duplicates().rename(columns={'Origin': 'Country'}), 
                indicator='Buy', how='left')
df1['Buy'] = df1['Buy'].map({'left_only': 0, 'both': 1}).astype(int)

  Article  Country Colour  Buy
0   Pants  Germany    Red    0
1    Pull   Poland   Blue    1