使用python,我想合并多个变量;A, B, C,但是当在一个数据集中缺少实现A - B - C时,使用观察到的更精细的组合(如B - C)。
的例子:
假设我有一个包含人的特征(性别、已婚、城市)的数据集(df1)。另一个数据集(df2),我有一个人的收入中位数,根据他们的性别,城市,结婚(与groupby创建)。
然后我想将收入中位数输入到第一个数据集(df1)中,以匹配尽可能多的特征。也就是说,如果个人具有性别特征,已婚,收入中位数,使用该值。如果个人具有只有城市结婚收入中值的特征,就使用该值。
类似的
df1 = pd.DataFrame({'Male':['0', '0', '1','1'],'Married':['0', '1', '0','1'], 'City': ['NY', 'NY', 'NY', 'NY']})
Male Married City
0 0 NY
0 1 NY
1 0 NY
1 1 NY
df2 = pd.DataFrame({'Male':['0', '0', '1'],'Married':['0', '1', '1'], 'City': ['NY', 'NY','NY'], 'income':['300','400', '500']})
Male Married City income
0 0 NY 300
0 1 NY 400
1 1 NY 500
'''
and the desired outcome:
'''
desired_df1:
Male Married City income
0 0 NY 300
0 1 NY 400
1 0 NY 300
1 1 NY 400
我想做第一次合并by=['male','married','city']
,然后从第二次合并by=['married','city']
填补缺失的值。但我认为应该有一个更系统、更简单的方法。有什么建议吗?
如果配方不正确或重复(我仔细看了,没有发现任何东西),谢谢,对不起。
合并后也可以进行分组和填充:
out = df1.merge(df2,on=['Male','Married','City'],how='left')
out['income'] = (out['income'].fillna(out.groupby(['Married','City'])['income']
.fillna(method='ffill')))
print(out)
Male Married City income
0 0 0 NY 300
1 0 1 NY 400
2 1 0 NY 300
3 1 1 NY 500 # <- Note that this should be 500 not 400