比较两个 csv 文件中的特定字符串并根据这些字符串制作第三个 csv

Comparing a specific string in two csv files and making third csv based on those strings

我有这个 csv 文件:

OU                                   Mailfile   
CORP:Jenny Smith:                    mail/246802.nsf
"CORP:John Smith:,John Smith:"       mail/123456.nsf
STORE:Mary Poppins:                  mail/789012.nsf
STORE:Tony Stark:                    mail/345678.nsf
STORE:Carmen Sandiego:               mail/901234.nsf
NEWS:Peter Parker:                   mail/567890.nsf
NEWS:Clark Kent:                     mail/654321.nsf
STORES:store123                      mail/369121.nsf
NEWS:CORPmanager                     mail/137112.nsf
NEWS:STOREmanager                    mail/083561.nsf

然后file2.csv:

OU                      
CORP
STORE     
NEWS

对于 file2.csv 中包含 'CORP'、'STORE' 或 'NEWS' 的每一行,我想搜索 file1.csv 并创建一个文件,例如 STOREall.csv、CORPall.csv 和 NEWSall.csv.

比如NEWSall.csv

OU                                   Mailfile

NEWS:Peter Parker:                   mail/567890.nsf
NEWS:Clark Kent:                     mail/654321.nsf
NEWS:CORPmanager                     mail/137112.nsf
NEWS:STOREmanager                    mail/083561.nsf

但我得到的是这个输出:

在CORPall.csv

OU                                   Mailfile
CORP:Jenny Smith:                    mail/246802.nsf
CORP:John Smith:,John Smith:         mail/123456.nsf
NEWS:CORPmanager                     mail/137112.nsf

然后NEWSall.csv

OU                                   Mailfile
NEWS:Peter Parker:                   mail/567890.nsf
NEWS:Clark Kent:                     mail/654321.nsf

由于 CORP 也在新闻中,因此出现在 CORPall.csv 中。我不想要那个。如果它在 : 之前说 NEWS 那么它应该在 NEWSall.csv 中,等等

我使用了这里有人给我看的这个片段:

for dept in OUList['OU']:
    df[df['OU'].str.contains(dept)]
    df_dept['OU'].to_csv(f'{dept}all.csv', index=False)

效果很好。但它只查找整个文件中的内容。所以我需要一种在 : 之前搜索的方法(注意在某些情况下有两个)

听起来“OU”列应该在 : 字符上分成两列。您可以使用 df['OU'].str.split(':') 执行此操作。将输出保存到新列,然后您可以在 :

左侧创建的列上使用相同的过滤技术

您可以使用 str.startswith 通过检查每个字符串元素的开头是否与 OUList 中的模式相匹配来过滤数据帧。

for dept in OUList['OU']:
    df_dept = df[df['OU'].str.startswith(f'{dept}:')]
    df_dept.to_csv(f'{dept}all.csv', index=False)