在pandas上合并:当无法匹配时减少合并变量的集合



使用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

最新更新