Mih*_*han 6 python compare numpy dataframe differentiation
我需要一个助手在 python 中对两个表之间的比较进行编码,目前在 winmerge 中完成。
代码如下
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
上周的表
df1=pd.read_csv(r"C:\Users\ri0a\OneDrive - Department of Environment, Land, Water and Planning\Python practice\pvmodules+_210326.csv")
Run Code Online (Sandbox Code Playgroud)
带有新型号和到期日期的本周表
df2=pd.read_csv(r"C:\Users\ri0a\OneDrive - Department of Environment, Land, Water and Planning\Python practice\pvmodules+_210401.csv")
Run Code Online (Sandbox Code Playgroud)
表头如下
第三列是 PV_module 证书:到期日期。我想设置一个类似于 excel 逻辑 '=IF (D2<DATEVALUE("19/04/2021"),"Expired","OK 的逻辑。这里的目标是删除到期日期低于的整个行特定日期/今天的日期。
接下来,导入dataframe_diff包
from dataframe_diff import dataframe_diff
Run Code Online (Sandbox Code Playgroud)
执行差异
d1_column,d2_additional=dataframe_diff(df1,df2,key=['PV Module Certificate: Licensee/Certificate Holder Account','Model Number/s'])
Run Code Online (Sandbox Code Playgroud)
使用此包 d2_additional 显示与上周相比,本周是否添加了与型号相关的新行。

但是,我正在尝试复制以下输出
涉及的任务是
请帮助我解决这个问题。
提前致谢。
现在:与
d2_expires = merged_df[merged_df._merge == 'left_only']
Run Code Online (Sandbox Code Playgroud)
与
d2_additional = merged_df[merged_df._merge == 'right_only']
Run Code Online (Sandbox Code Playgroud)
我得到相同的输出。返回相同的行,这不应该是这种情况。如下图所示
最后,我收到 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]
Run Code Online (Sandbox Code Playgroud)
我很高兴与您分享我的数据。请发送电子邮件至 rsmnsu@gmail.com 以进行数据共享。
您必须确保在加载数据后将日期转换为日期时间格式,并将列重命名为更易于使用的名称(例如“cert_holder”、“model_no”、“approval_date”、“expiry_date”)
我想设置一个类似于 excel 逻辑 '=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')]
Run Code Online (Sandbox Code Playgroud)
但这仅适用于您的到期日期为日期时间格式的情况。
接下来合并两个数据框:
merged_df = pd.merge(df1,df2, how='outer', on=['cert_holder','model_no'],\
suffixes=['_last_week','_this_week'], indicator=True)
Run Code Online (Sandbox Code Playgroud)
如果某个模型(在本例中为一行)包含在上周的表中,但在当前周的表中缺失,我想在它旁边的新列“状态”中分配一个新字段“过期”。/或创建一个新的数据框 d2_expires,仅来自那些丢失的行。
d2_expires = merged_df[merged_df._merge == 'left_only']
Run Code Online (Sandbox Code Playgroud)
另一个数据框,其中上周丢失但本周添加的行或产品模型仍然......作为 d2_additional。
d2_additional = merged_df[merged_df._merge == 'right_only']
Run Code Online (Sandbox Code Playgroud)
第三个数据帧,其中相同行(相同证书 + 相同型号但不同的新到期日期)的任何更改(例如到期日期)被捕获为 d3_comparison。
d3_comparison = merged_df[merged_df._merge == 'both'].\
loc[lambda x: x.expiry_date_last_week != x.expiry_date_this_week]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |