我有一个需要在熊猫数据框上使用的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
列
我正竭尽全力地做到这一点。有人可以指出我正确的方向吗?我当时想将熊猫groupby
与np.where
一起使用,以便在匹配时比较B
列的值。
修改
new_list['Y'] = np.where(list['A'] == new_list['X'], list['B'], np.nan)
上面的解决方案给出了相同的结果,但这是在 Pandas中定义这样的 Excel 公式的正确方法吗?
答案 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)
上面的代码已实现并提供相同的解决方案。