我有1985 - 2014年期间各种气象站的最低和最高气温和降水量的天气数据。我在Pandas使用GroupBy找到了每年的平均最低和最高温度。
data1= data
#Replaceing missing values represented by -9999 with 0
df2=data1.replace(to_replace=-9999,value=0)
#performing groupby over the year part of the string given in Date
df3=data1.groupby(df2.Date.str[0:4])
tmp=df3['MaxTemp'].mean().to_frame()
Date MaxTemp 1985 153.347945 1986 126.963370 .... ......
fileName=filePath.split('\\')[-1]
#filename is USC00110072.txt
fname=pd.DataFrame([fileName]*len(tmp.index))
fname.columns=['File']
# mtemp=pd.concat([])
fname.index=[i for i in range(1985,2015)]
fname
现在我想连接 tmp 和 fname 数据框,以便为我提供数据:
FileName Year MaxTemp USC00110072.txt 1985 153.347945205 USC00110072.txt 1986 126.963369963 .... ... ......
要做到这一点,我使用pandas.concat([fname,tmp], axis=1)
,但我得到以下输出:
File MaxTemp
1985 USC00110072.txt NaN
1986 USC00110072.txt NaN
1987 USC00110072.txt NaN
.... ........ ...
1985 NaN 153.347945
1986 NaN 126.963370
1987 NaN 177.602740
请建议我在 concat 函数中进行哪些更改,以便获得所需的输出。
答案 0 :(得分:0)
问题是在第一个数据帧中年是字符串,以第二个整数。
因此需要astype
将string
转换为integer
:
tmp = (data.replace(to_replace=-9999,value=0)
.groupby(data.Date.str[0:4].astype(int))
.mean()
.to_frame())
另外,解决方案应该由assign
简化,以便为具有相同值的新列添加:
df = (data.replace(to_replace=-9999,value=0)
.groupby(data.Date.str[0:4].astype(int))
.mean()
.to_frame()
.assign(File = fileName))