如何根据另一个数据帧的条件匹配在数据帧中创建新列?

时间:2021-02-18 09:41:38

标签: python-3.x pandas dataframe

情况

我有两个数据框 df1 包含一些关于汽车的信息:

cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
        'Price': [22000,25000,27000,35000]
        }

df2 保存与 df1 中的汽车相对应的媒体类型:

images = {'Brand': ['Honda Civic','Honda Civic','Honda Civic','Toyota Corolla','Toyota Corolla','Audi A4'],
        'MediaType': ['A','B','C','A','B','C']
        }

预期结果

因此,我想在 df1 中创建一个概览,说明是否有可用于汽车的媒体类型:

result = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
        'Price': [22000,25000,27000,35000],
          'MediaTypeA' : [True,True,False,False],
          'MediaTypeB' : [True,True,False,False],
          'MediaTypeC' : [False,False,False,True]
        }

我怎样才能意识到这一点?

我已经可以检查 Brand 中是否存在来自 df1df2,它告诉我存在或根本没有可用的媒体类型:

df1['check'] = df1['Brand'].isin(df2['Brand'])

但我不知道如何将它与特殊媒体类型的检查结合起来。

1 个答案:

答案 0 :(得分:0)

使用get_dummies作为指标,通过max创建唯一索引并通过DataFrame.join添加到第一个DataFrame,最后替换缺失值:

df11 = pd.get_dummies(df2.set_index('Brand')['MediaType'], dtype=bool).max(level=0)
df = df1.join(df11, on='Brand').fillna(False)
print (df)
            Brand  Price      A      B      C
0     Honda Civic  22000   True   True   True
1  Toyota Corolla  25000   True   True  False
2      Ford Focus  27000  False  False  False
3         Audi A4  35000  False  False   True

如果可能,df1 中的某些缺失值则需要 DataFrame.reindexfill_value=False

df22 = pd.get_dummies(df2.set_index('Brand')['MediaType'], dtype=bool).max(level=0)
df = df1.join(df22.reindex(df1['Brand'].unique(), fill_value=False), on='Brand')
print (df)
            Brand  Price      A      B      C
0     Honda Civic  22000   True   True   True
1  Toyota Corolla  25000   True   True  False
2      Ford Focus  27000  False  False  False
3         Audi A4  35000  False  False   True