我需要一个与编码在Python两个表之间的比较助理,这是目前在winmerge完成。
代码如下
import pandas as pd
字符串
上周的table
df1=pd.read_csv(r"C:\Users\ri0a\OneDrive - Department of Environment, Land, Water and Planning\Python practice\pvmodules+_210326.csv")
型
本周表中有新的型号和到期日期
df2=pd.read_csv(r"C:\Users\ri0a\OneDrive - Department of Environment, Land, Water and Planning\Python practice\pvmodules+_210401.csv")
型
表头如下
x1c 0d1x的数据
第三列是PV_module certificate:Expiry date。我想设置一个类似于excel logic '=IF(D2<DATEVALUE(“19/04/2021”),“Expired”,“OK)的逻辑。这里的目标是删除到期日期低于特定日期/今天日期的整行。
接下来,创建rame_diff包
from dataframe_diff import dataframe_diff
型
执行差异
d1_column,d2_additional=dataframe_diff(df1,df2,key=['PV Module Certificate: Licensee/Certificate Holder Account','Model Number/s'])
型
使用此程序包d2_additional显示与上周相比,本周是否有与添加的型号相关联的新行。
但是,我尝试复制以下输出
的
所涉及的任务是
1.如果某个模型(在本例中是一行)包含在上周的表中,但在当前周的表中缺失,我想在它旁边的新列“Status”中分配一个新字段“Expired”。/或仅从那些缺失的行创建一个新框架d2_expires。
1.另一个框架,其中上周缺少但本周添加的行或产品模型仍然是.作为d2_additional。
1.第三个框架,其中相同行(相同证书+相同型号但不同的新失效日期)的任何更改(例如失效日期)被捕获为d3_comparison。
现在:与
d2_expires = merged_df[merged_df._merge == 'left_only']
型
和
d2_additional = merged_df[merged_df._merge == 'right_only']
型
我得到了相同的输出。返回了相同的行,这不应该是这样的。从下面的屏幕可以看到
的
这与加法x1c4d 1x相同
最后,我得到了一个错误d2_comaprison。
d3_comparison = merged_df[merged_df._merge == 'both'].\
loc[lambda x: x.PV Module Certificate: Expiry Date_last_week != x.PV Module Certificate: Expiry Date_this_week]
型
1条答案
按热度按时间d8tt03nd1#
您必须确保在加载数据后将日期转换为日期时间格式,并将列重命名为更容易使用的格式(例如'cert_holder','model_no','approval_date','expiry_date')
我想设置一个类似于excel logic '=IF(D2<DATEVALUE(“19/04/2021”),“Expired”,“OK)的逻辑。这里的目标是删除到期日期低于特定日期/今天日期的整行。
这(删除)可以通过以下方式完成:
字符串
但只有当你的到期日期是日期时间格式时,这才有效。
接下来合并两个字符串:
型
如果某个模型(在本例中是一行)包含在上周的表中,但在当前周的表中缺失,我想在它旁边的新列“Status”中分配一个新字段“Expired”。/或仅从那些缺失的行创建一个新框架d2_expires。
型
另一个框架,其中上周缺少但本周添加的行或产品模型仍然是.作为d2_additional。
型
第三个框架,其中相同行(相同证书+相同型号但不同的新到期日期)的任何更改(例如到期日期)被捕获为d3_comparison。
型