我有一个像这样的数据框
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 day的零值仅由当天的avg temp取代) 输出将是
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
这些价值将被相应的日期所取代。我正在努力做到这一点
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 :(得分: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