numpy 在Python中自动执行Winmerge比较

7bsow1i6  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(116)

我需要一个与编码在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]

d8tt03nd

d8tt03nd1#

您必须确保在加载数据后将日期转换为日期时间格式,并将列重命名为更容易使用的格式(例如'cert_holder','model_no','approval_date','expiry_date')
我想设置一个类似于excel logic '=IF(D2<DATEVALUE(“19/04/2021”),“Expired”,“OK)的逻辑。这里的目标是删除到期日期低于特定日期/今天日期的整行。
这(删除)可以通过以下方式完成:

df = df[df['expiry_date'] >= pd.Timestamp('today')]

# Or

df = df[df['expiry_date'] >= pd.Timestamp('2021-04-23')]

字符串
但只有当你的到期日期是日期时间格式时,这才有效。
接下来合并两个字符串:

merged_df = pd.merge(df1,df2, how='outer', on=['cert_holder','model_no'],\
                     suffixes=['_last_week','_this_week'], indicator=True)


如果某个模型(在本例中是一行)包含在上周的表中,但在当前周的表中缺失,我想在它旁边的新列“Status”中分配一个新字段“Expired”。/或仅从那些缺失的行创建一个新框架d2_expires。

d2_expires = merged_df[merged_df._merge == 'left_only']


另一个框架,其中上周缺少但本周添加的行或产品模型仍然是.作为d2_additional。

d2_additional = merged_df[merged_df._merge == 'right_only']


第三个框架,其中相同行(相同证书+相同型号但不同的新到期日期)的任何更改(例如到期日期)被捕获为d3_comparison。

d3_comparison = merged_df[merged_df._merge == 'both'].\
        loc[lambda x: x.expiry_date_last_week != x.expiry_date_this_week]

相关问题