我有一个csv,我想根据某些标准更新。示例:
csv:
Name UniqueID Status
Apple 1121 Full
Orange 1122 Eaten
Apple 1123 Rotten
新值(也在csv中):
csv1:
Apple 1121 Eaten
orange 1122 Eaten
Pear 1233 Wiggly
更新后的csv如下所示:
Name UniqueID Status
Apple 1121 Full
Orange 1122 Eaten
Apple 1123 Rotten
Pear 1233 Wiggly
Apple 1121 Eaten
所以基本上跳过具有相同UniqueID
和Status
的条目。如果它是一个新的UniqueID
或一个现有的UniqueID
和一个不同的Status
,我希望它包含在一个单独的行中。因此,从上面的例子orange 1122 Eaten
,被排除在外。你知道吗
我尝试将csv转换为数据帧并使用drop_duplicates
。你知道吗
data = pd.concat([pd.DataFrame.from_csv(csv, csv1)].drop_duplicates(subset=['Status', 'UniqueID'])
但可以预见的是,它放弃了所有的复制品。结果是:
Name UniqueID Status
Apple 1121 Full
Orange 1122 Eaten
Apple 1123 Rotten
Pear 1233 Wiggly
# Apple 1121 Eaten <-- this result was excluded
设置
选项1
set_index
+combine_first
+reduce
选项2
pd.concat
+drop_duplicates
解释
按顺序打印这些文件,然后逐行打印
cat csv csv1 | awk '{
保留数组键中的第二列(
unique id
),第三列作为值。然后检查,如果数组元素不存在(表示这是该行的第一次出现)或值不等于第三个(表示该值已更改)if (!status[$2] || status[$2]!=$3) {
然后只需打印行并设置数组值
print $0;
status[$2]=$3
如果结束
}
awk结束
}'
相关问题 更多 >
编程相关推荐