亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據與值的輔助數據幀匹配的條件在主數據幀的列中填充 NaN,以使用多個填充值填充 NaN

如何根據與值的輔助數據幀匹配的條件在主數據幀的列中填充 NaN,以使用多個填充值填充 NaN

絕地無雙 2023-10-06 16:30:12
我需要根據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.01   102     Dog         Housing     6.02   103     Horse       Housing     NaN3   104     Horse       Housing     5.04   105     Goat        Housing     3.05   106     Dog         Feeding     3.06   107     Cat         Feeding     6.07   108     Horse       Housing     6.08   109     Hamster     Feeding     5.09   110     Horse       Feeding     3.0平均值數據    Animal_Type Cost_Type   Price0   Cat         Feeding     4.5000001   Cat         Housing     5.0000002   Chicken     Feeding     5.0000003   Chicken     Housing     4.5000004   Dog         Feeding     3.0000005   Dog         Housing     6.0000006   Goat        Feeding     5.0000007   Goat        Housing     5.0000008   Hamster     Feeding     5.2500009   Hamster     Housing     3.00000010  Horse       Feeding     3.50000011  Horse       Housing     5.66666712  Rabit       Feeding     3.00000013  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)))
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

我需要根據groupby和mean函數創建的第二個數據幀在主數據框中填充 NA 值。


你不需要那一步。您可以通過分組為多個數據幀、對每個單獨的數據幀應用均值并僅在該數據幀內填充 NA 值來一步完成此操作。


因此,不要創建mean_data數據框,而是執行以下操作:


def fill_by_mean(df):

    df["Price"] = df["Price"].fillna(df["Price"].mean())

    return df


main_data = main_data.groupby(["Animal_Type", "Cost_Type"]).apply(fill_by_mean)

每次單獨調用 fill_by_mean() 都會看到一個如下所示的數據幀:


    Pet_ID Animal_Type Cost_Type  Price

11     112       Rabit   Feeding    NaN

34     135       Rabit   Feeding    3.0

38     139       Rabit   Feeding    3.0

然后它獲取價格列的平均值并使用它填充 NA 值。然后 Groupby 將所有單獨的數據幀重新連接在一起。


查看完整回答
反對 回復 2023-10-06
  • 1 回答
  • 0 關注
  • 96 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號