我需要根据groupby和mean函数创建的第二个数据帧在主数据框中填充 NA 值。我的原始数据框有大约 1.5K NaN 我需要填充,因此这需要大规模重现。我创建了一个假数据框,它是使用假场景对我的数据进行简短、快速和肮脏的模仿。我无法与你分享我的真实数据。
我的总体想法是:
main_data[
(main_data["Animal_Type"] == mean_data["Animal_Type"]) &
(main_data["Cost_Type"] == mean_data["Cost_Type"])
] = main_data["Price"].fillna(mean_data["Price"])
显然,这是行不通的,但这就是我的逻辑如何运作的一般要点。我找到了[他的答案][1],但我无法将其正确应用于我的问题。很多答案都涉及mask或假设我的数据非常小,只有一个值可以替换我的所有 NaN。我的原始数据集中有大约 50 种不同的方法,它们与每个“成本类型”的“动物类型”唯一配对。我的原始数据框大约有 30K 个观察值,其中也充满了独特的观察值。我可以映射,但这仅适用于单个列。我对编码相当陌生,所以很多其他答案对我来说太复杂了,也无法理解和改变。
主数据
mean_data.head(10)
**Pet_ID Animal_Type Cost_Type Price**
0 101 Goat Housing 6.0
1 102 Dog Housing 6.0
2 103 Horse Housing NaN
3 104 Horse Housing 5.0
4 105 Goat Housing 3.0
5 106 Dog Feeding 3.0
6 107 Cat Feeding 6.0
7 108 Horse Housing 6.0
8 109 Hamster Feeding 5.0
9 110 Horse Feeding 3.0
平均值数据
Animal_Type Cost_Type Price
0 Cat Feeding 4.500000
1 Cat Housing 5.000000
2 Chicken Feeding 5.000000
3 Chicken Housing 4.500000
4 Dog Feeding 3.000000
5 Dog Housing 6.000000
6 Goat Feeding 5.000000
7 Goat Housing 5.000000
8 Hamster Feeding 5.250000
9 Hamster Housing 3.000000
10 Horse Feeding 3.500000
11 Horse Housing 5.666667
12 Rabit Feeding 3.000000
13 Rabit Housing 3.000000
我的可重现代码:
random.seed(10)
random.seed(10)
main_data = pd.DataFrame(columns = ["Pet_ID", "Animal_Type", "Cost_Type", "Price", "Cost"])
main_data["Pet_ID"] = pd.Series(list(range(101,150)))
ITMISS
相关分类