在熊猫数据框上迭代

时间:2020-01-31 20:28:08

标签: python pandas csv jupyter-notebook

我有两个csv文件。 file1看起来像这样: file1

文件2看起来像这样:file2

我需要编写一个脚本(我正在使用pandas数据框),每当Brewer和Microbrewers Licensees名称在file1的列中时,该列都用“是”填充该列。 如果文件1上没有Brewer和Microbrewers许可证持有人,则将文件添加到文件1中,包括县和地址(由文件1的各列解析)

到目前为止,我得到了:

import pandas as pd
import numpy as np
factories=[]

file1=pd.read_csv("CraftBeverageData.csv")
file2=pd.read_csv("brewers.csv")
beers1 = pd.DataFrame(file1)
for i in beers1["Name"]:
    factories.append(i)

for name in brewers["Brewer and Microbrewers Licensees"]:
    if name in  factories:
        beers1["Brewer and Microbrewers Licensees"]="Yes"

1 个答案:

答案 0 :(得分:0)

据我所知,酿酒师和微型酿酒师的许可证持有人 CraftBeverageData.csv 已填充为预期结果, 但实际上应该根据 Name 列的存在填充数据 在 CraftBeverageData.csv 中,另一个数据框的第一列中。

代码应如下所示:

# Read DataFrames
beverages = pd.read_csv("CraftBeverageData.csv")
brewers = pd.read_csv("brewers.csv")
# Processing
licNames = brewers['Brewer and Microbrewers Licensees'].values
beverages['Brewer and Microbrewers Licensees'] =\
    beverages.Name.apply(lambda name: 'Yes' if name in licNames else '')

我无法测试此代码,因为您未提供源数据 以易于复制的形式。

基于 Numpy 的另一个更简洁的解决方案(在您阅读了两个DataFrame之后):

licNames = brewers['Brewer and Microbrewers Licensees']
beverages['Brewer and Microbrewers Licensees'] =\
    np.where(beverages.Name.isin(licNames), 'Yes', '')