我有两个数据框 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
中是否存在来自 df1
的 df2
,它告诉我存在或根本没有可用的媒体类型:
df1['check'] = df1['Brand'].isin(df2['Brand'])
但我不知道如何将它与特殊媒体类型的检查结合起来。
答案 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.reindex
和 fill_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