如何在Pandas中连接数据帧

时间:2018-04-12 06:48:41

标签: python pandas dataframe pandas-groupby

我有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 函数中进行哪些更改,以便获得所需的输出。

1 个答案:

答案 0 :(得分:0)

问题是在第一个数据帧中年是字符串,以第二个整数。

因此需要astypestring转换为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))