站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群.欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!
发布于2022-01-18 09:37 阅读(516) 评论(0) 点赞(10) 收藏(0)
我需要在某些条件下使用 python/pandas 对数据框执行 vlookup,就像在 Excel 中一样。
状况:-
我需要使用 Excel 之类的 vlookup 在我的第二个 DataFrame 中创建一个新列 (DFM)。
如果 DFM 值为 na,则在第二个 Dataframe 的 DFM 中打印 100%。就像下面的结果数据一样。
在结果数据 DFM 列中,我只需要对前 10 行应用 vlookup。然后从第 11 行开始,我想一次又一次地复制前 10 行数据,但每次都删除第一行之后。请看下面的结果示例。因为我们将在每次迭代中删除第一行,所以最后一行是空的,所以我们需要在条件 2 中打印 100%。
第一个数据框:-
S.No Cal Date DFM
1 8 01-03-2013 100.00%
1 7 01-06-2013 100.00%
1 6 01-09-2013 100.00%
1 5 01-12-2013 99.99%
1 4 01-03-2014 99.97%
1 3 01-06-2014 99.95%
1 2 01-09-2014 98.89%
1 1 01-12-2014 39.36%
1 0 01-03-2015 0.00%
1 0 01-06-2015 0.00%
1 0 01-09-2015 0.00%
1 0 01-12-2015 0.00%
1 8 01-03-2013 100.00%
1 7 01-06-2013 100.00%
1 6 01-09-2013 100.00%
1 5 01-12-2013 99.99%
1 4 01-03-2014 99.97%
1 3 01-06-2014 99.95%
1 2 01-09-2014 98.89%
1 1 01-12-2014 39.36%
1 0 01-03-2015 0.00%
1 0 01-06-2015 0.00%
1 0 01-09-2015 0.00%
1 0 01-12-2015 0.00%
1 8 01-03-2013 100.00%
1 7 01-06-2013 100.00%
1 6 01-09-2013 100.00%
1 5 01-12-2013 99.99%
1 4 01-03-2014 99.97%
1 3 01-06-2014 99.95%
1 2 01-09-2014 98.89%
1 1 01-12-2014 39.36%
1 0 01-03-2015 0.00%
1 0 01-06-2015 0.00%
1 0 01-09-2015 0.00%
1 0 01-12-2015 0.00%
第二个数据框:-
Cal Group
1 period 1
2 period 1
3 period 1
4 period 1
5 period 1
6 period 1
7 period 1
8 period 1
9 period 1
10 period 1
1 period 1
2 period 1
3 period 1
4 period 1
5 period 1
6 period 1
7 period 1
8 period 1
9 period 1
10 period 1
1 period 1
2 period 1
3 period 1
4 period 1
5 period 1
6 period 1
7 period 1
8 period 1
9 period 1
10 period 1
结果:-
Cal Group DFM
1 period 1 39.36%
2 period 1 98.89
3 period 1 99.95%
4 period 1 99.97%
5 period 1 99.99%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
1 period 1 98.89
2 period 1 99.95%
3 period 1 99.97%
4 period 1 99.99%
5 period 1 100.00%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
1 period 1 99.95%
2 period 1 99.97%
3 period 1 99.99%
4 period 1 100.00%
5 period 1 100.00%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
在许多编程语言中,vlookups 的等价物是SQL 连接的一些实现。在熊猫中,要么df.merge()
用于列,要么df.join()
用于索引。
为了创建移位效果,我连接了每个移位片段的列表。
import pandas as pd
df1 = pd.read_csv("temp/df1.csv").drop_duplicates()
df2 = pd.read_csv("temp/df2.csv").drop_duplicates()
vlookuped = (df2.merge(df1, how="left", on=["Cal"])
.drop(columns=["S.No", "Date"]))
result = (
pd.concat([
vlookuped,
vlookuped.assign(DFM=lambda x: x["DFM"].shift(-1)),
vlookuped.assign(DFM=lambda x: x["DFM"].shift(-2))],
ignore_index=True)
.fillna("100.00%"))
此代码生成以下数据框:
Cal Group DFM
1 period 1 39.36%
2 period 1 98.89%
3 period 1 99.95%
4 period 1 99.97%
5 period 1 99.99%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
1 period 1 98.89%
2 period 1 99.95%
3 period 1 99.97%
4 period 1 99.99%
5 period 1 100.00%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
1 period 1 99.95%
2 period 1 99.97%
3 period 1 99.99%
4 period 1 100.00%
5 period 1 100.00%
6 period 1 100.00%
7 period 1 100.00%
8 period 1 100.00%
9 period 1 100.00%
10 period 1 100.00%
站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取 全套python视频教程,关注公众号回复充值+你的账号,免费为您充值1000积分
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/1256396/84656dc4ffd6b5e3b8d7/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!