带有两个数据框的熊猫偏移和匹配功能

时间:2018-12-12 09:24:49

标签: python pandas dataframe excel-formula

我有一个需要在熊猫数据框上使用的excel公式

=IF(OFFSET(list!$B$1,MATCH($X1,list!$A:$A,0)-1,0)=0,"",OFFSET(list!$B$1,MATCH($X1,list!$A:$A,0)-1,0))

数据框:列表

A       B           C    
24309   Pepsi       US
45768   McDonalds   US
45638   Apple       Ireland
59374   Google      Ireland

数据框2:新列表

X         Y
24309     ?
45768     ?
45638
59374

目标是如果Y中的值与范围new_list中的值匹配,则填充第二个X数据帧的A1:A4

我正竭尽全力地做到这一点。有人可以指出我正确的方向吗?我当时想将熊猫groupbynp.where一起使用,以便在匹配时比较B列的值。

修改

new_list['Y'] = np.where(list['A'] == new_list['X'], list['B'], np.nan)

上面的解决方案给出了相同的结果,但这是在 Pandas中定义这样的 Excel 公式的正确方法吗?

2 个答案:

答案 0 :(得分:0)

最简单,最有效的方法是在值上应用掩码。在这里,您可以找到一个示例数据框:

df1 = pd.DataFrame({
"Date" : ['2013-11-22', '2013-10-24', '2013-09-24', '2013-02-15'],
"Fruit" : ['Banana', 'Orange', 'Apple', 'Celery'], 
"Num" : [22.1, 8.6, 7.6, 10.2],
"Color" : ['Yellow', 'Orange', 'Green', 'Green']
})

在应用此蒙版之后,可以打印出蒙版以查看效果,也可以按照自己喜欢的方式使用蒙版。

mask = (df1["Fruit"] == df1["Color"])
print(mask)

我希望有帮助。

答案 1 :(得分:0)

new_list['Y'] = np.where(list['A'] == new_list['X'], list['B'], np.nan)

上面的代码已实现并提供相同的解决方案。