我有2个CSV文件,是在不同的日期创建的,我想比较,我想更新第二个基于差异的一些领域从第一。
表中的每一项都由3行组成(您可以看到Name_* 没有更改)此外,关于状态列,我们将始终具有LISTED、STARTED和PASSED/FAILED值
第二个是基本CSV,它包含所有项,第一个CSV(新CSV)可以是不同的大小(缺少一个或几个项),例如,我们缺少第四个项“Name_4”
更新成本字段的规则,我们需要有Iteration_First_CSV>Iteration_Second_CSV & Name_First_CSV==Name_Second_CSV & Status_First_CSV==['PASSED','FAILED'](我们不想更新LISTED和STARTED成本)
更新状态字段的规则,我们需要Iteration_First_CSV>Iteration_Second_CSV & Name_First_CSV==Name_Second_CSV
这是第二个CSV enter image description here
第一个CSV enter image description here
结果应如下所示enter image description here
我开始在“成本”字段更新上工作:
df_second.loc[((df_first['Name'].eq(df_second['Name']))&(df_first['Cost'].ge(df_second['Cost']))&(df_first['Status'].isin(['PASSED','FAILED']))), 'Cost'] = df_first['Cost']
但这会导致"Must have equal len keys and value when setting with an iterable"
错误
1条答案
按热度按时间rdrgkggo1#
可能最简单的方法是过滤你想要检查的行,合并,修改和“重建”数据框。如果你有很多数据,这可能不是最佳的。
这是从我的脑海中完成的,所以可能会有一些小问题。
注:也许这是不可能的。但是看着文件,我会做的第一件事就是改变格式。它似乎有重复的信息(这是坏的多个原因)。我不知道数据集的确切细节,但从我所看到的,我只会保留:
status_* 列可以是布尔值。我认为这将是一个更好的结构(除非我错过了什么),这将是更容易在Pandas和