【问题标题】:Loop and match strings between two different pandas Dataframes在两个不同的熊猫数据帧之间循环和匹配字符串
【发布时间】:2019-03-20 07:10:57
【问题描述】:

我有两个不同的数据帧 df 和 df2,我想遍历 df 的每一行以在 df2 的特定行中搜索某些匹配项,并为每个匹配项返回一个 txt 文件。

df=

name	Tec	   Location
jhon	js sr	      nz
mark	python ssr    us
alan	java jr	      mx

df2=

company	        job	  Country	   Index
company a	js jr	      uk	    1
company b	python ssr    us	    2
company c	java jr	      mx	    3

到目前为止,我一直在做以下事情:

for index, row in df.iterrows():
    for indexb, rowb in df2.iterrows():
        if str(row.Tec) in str(rowb.job) and str(row.Location) in rowb.Country:              
            print ('Match with ' + str(rowb.company))
            sys.stdout= open(r'path\to\file\%s.txt'%(row['name']+ str(rowb.Index),), 'w')
    else:
        pass

我不断收到匹配错误的文本文件,或者 df2 中的第一行在所有输出 txt 文件中重复。 我想将 Tec 与工作和 Location 与国家进行比较。 因此,例如,这种情况的输出将是: 标记 2.txt ,其中文件包含文本“与公司 b 匹配”

有什么想法吗?

【问题讨论】:

  • 您打算在哪些列上匹配两个数据框?请为示例输入添加预期输出。
  • 完成,感谢您的建议

标签: python pandas loops dataframe match


【解决方案1】:

迭代行不是使用 Pandas DataFrames 的首选方式。

您可能想尝试加入 df 和 df2。然后应用过滤器将要保存到 csv 的行保留。

df = pd.DataFrame([['jhon', 'js sr', 'nz'], ['mark', 'python ssr', 'us'], ['alan', 'java jr', 'mx']], columns=['name', 'Tec', 'Location'])
df2 = pd.DataFrame([['company a', 'js jr', 'uk'], ['company b', 'python ssr', 'us'], ['company c', 'java jr', 'mx']], columns=['company', 'job', 'Country'])
# Merge the two dataframes
df3 = df.merge(df2, how='right', left_on=['Tec', 'Location'], right_on=['job', 'Country'])
df3 = df3[df3['name'].notnull()]
df3['name'].to_csv('output.csv')

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2023-01-27
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2020-11-28
    • 2017-04-29
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多