【问题标题】:How to use a dataset to fill in a missing column in another set如何使用数据集填充另一组中的缺失列
【发布时间】:2022-01-21 15:54:45
【问题描述】:

这里的幼稚问题:假设我有一个数据框,分为df1 和df2。 现在,df1 由以下变量组成:

categ_var_1 categ_var_2 binary_target
A 1 1
B 1 1
C 4 0
B 5 0
B 5 1
... ... ...

目标:我想用df1来填补df2中缺失的那一列,它具有相同的分类变量(不同的数据),但是binary_target完全失踪:

categ_var_1 categ_var_2
F 3
B 2
A 5
A 5
B 1
... ...

以简单的方式解决此问题的最佳方法是什么? 我的第一个猜测是使用机器学习模型(使用分类变量作为预测变量),但我无法对比结果,因为df2 没有目标变量。 我的第二个猜测是合并两个集合并进行列插补,尽管最终结果并不准确。 你怎么看?任何帮助将不胜感激! (唯一的限制是使用 Python!)

【问题讨论】:

  • 你能显示一个简单的df2吗?
  • df2 = pd.DataFrame({ 'city':['Lehi', 'Boston', 'Denver', 'San Francisco', 'Atlanta'], 'population_thousands':[50-100 , 1-50, 100-300, 1-50]})

标签: python pandas dataframe data-science analytics


【解决方案1】:

如果您有所有可能的“categ_var_1”和“categ_var_2”对,您可以将类别值映射到目标值并使用df2上的映射器:

类似:

mapper = df1.set_index(['categ_var_1','categ_var_2'])['binary_target'].to_dict()
out = df2.apply(tuple, axis=1).map(mapper)

然后给出:

0    NaN
1    NaN
2    NaN
3    NaN
4    1.0

如您所见,有很多 NaN 值,因为这些组合不在 mapper 中。

然后你可以做的是从每个类别创建虚拟变量并使用分类算法,也许像逻辑回归(scikit-learn 有一个类)。使用df1 作为训练集,df2 作为目标集。这显然会给你一个预测,而不是一个确切的值。另请注意,根据每个类别中的选项数量,自变量的大小可能会变得很大,因此df1 的大小也必须很大,否则预测将没有多大意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多