2017-07-02 20 views
1

我有這樣如何基於在條件fillna或更換

Temp_in_C Temp_in_F Date   Year Month Day 
    23   65  2011-12-12  2011 12  12 
    12   72  2011-12-12 2011  12  12 
    NaN   67  2011-12-12  2011 12  12 
    0   0  2011-12-12  2011 12  12 
    7   55  2011-12-13  2011 12  13 

我試圖讓這種格式輸出數據幀替換數據框中零個NaN值(楠和零個值的pertuculer日由日平均溫度只更換) 輸出將被

Temp_in_C Temp_in_F Date   Year Month Day 
    23   65  2011-12-12  2011 12  12 
    12   72  2011-12-12 2011  12  12 
    17.5  67  2011-12-12  2011 12  12 
    17.5  68  2011-12-12  2011 12  12 
    7   55  2011-12-13  2011 12  13 

這些閥將由perticuler一天的平均更換。我試圖做到這一點

temp_df = csv_data_df[csv_data_df["Temp_in_C"]!=0] 
temp_df["Temp_in_C"] = 
temp_df["Temp_in_C"].replace('*',np.nan) 
x=temp_df["Temp_in_C"].mean() 
csv_data_df["Temp_in_C"]=csv_data_df["Temp_in_C"] 
.replace(0.0,x) 
csv_data_df["Temp_in_C"]=csv_data_df["Temp_in_C"] 
.fillna(x) 

此代碼採取整列的意思,並直接替換它。 我該如何分組,然後取平均值,然後僅替換那一天的值。

+0

沒有這個結果數據損壞?例如,你的17.5 C結束於兩個不同的華氏值(兩者都不正確;它們都應該是63.5)。 –

+0

@JohnZwinck這些值不計算我寫他們只是爲了理解我的問題。數據中不是實際值。我只想定義我的問題。我理想的情況下,他們將是相同的 – PriyalChaudhari

回答

0

首先,NaN

df = df.replace(0,np.nan) 

更換零然後填寫使用transform缺失值(見本post

df.groupby('Date').transform(lambda x: x.fillna(x.mean())) 

給出:

Temp_in_C Temp_in_F Year Month Day 
0  23.0  65.0 2011  12 12 
1  12.0  72.0 2011  12 12 
2  17.5  67.0 2011  12 12 
3  17.5  68.0 2011  12 12 
4  7.0  55.0 2011  12 13