python - Excel like vlookup 在某些条件下使用 python pandas
问题描述
我需要在某些条件下使用 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%
推荐阅读
- reactjs - react-modal:如何关闭一个模式并同时打开一个新模式?
- google-cloud-platform - 使用服务帐号更新团队云端硬盘权限
- php - azure web app fopen('test.csv') 保存在哪里?
- python - Python:同一函数中所需变量的名称和“内容”
- php - Dreamweaver CC (2017) 提示在包含文件的外部不起作用
- vba - 使用 VBA 预览 Outlook 附件
- java - Spring Boot 应用程序未拉入外部 application.properties 文件
- java - SQLHelper 的游标返回带指数的数字
- jquery - 防止在移动设备上加载视频
- python - 来自帖子的龙卷风重定向完成,未捕获出现在控制台中