问题描述
我有两个数据集,分别由叶绿素浓度的月度气候(chla,1970年至2020年)和二氧化碳的逸度(fco2y,2002年至2020年)组成。其中一个数据集具有年份值,而另一个数据集仅具有月份值。有什么办法可以使用python仅基于location和month属性合并数据。我需要汇总数据以适应回归模型。
数据集1
+--------+-----------+------------+-------+
| lat | lon | chlor_a | month |
+--------+-----------+------------+-------+
| 78.375 | 23.125006 | 2.1265152 | 1 |
| 78.375 | 23.20834 | 2.1265152 | 2 |
| 78.375 | 23.291674 | 2.1265152 | 2 |
| 78.375 | 24.95834 | 0.31348512 | 1 |
| 78.375 | 25.041674 | 0.31348512 | 3 |
+--------+-----------+------------+-------+
数据集2
+----------+------+-------+--------------------+--+
| DATE | LAT | LON | FCO2_AVE_WEIGHTED | |
+----------+------+-------+--------------------+--+
| 15-02-70 | 9.5 | 156.5 | 303.672 | |
| 15-02-70 | 9.5 | 157.5 | 311.013 | |
| 15-02-70 | 9.5 | 158.5 | 321.322 | |
| 15-02-70 | 10.5 | 155.5 | 305.066 | |
+----------+------+-------+--------------------+--+
解决方法
如果日期列采用日期时间格式,则将其转换为字符串数据类型,并用'-'进行拆分,这样您将从表2中获得月份。 之后,使用df1.merge(df2,left_on = [df1列名称],right_on = [df2列名称])合并两个数据框
,正如Mohd已经提到的那样,您基本上可以通过两个熊猫标准函数来实现此目的。我刚刚为您的问题快速编码了一个现成的解决方案。请查看并阅读熊猫文档以获取更多信息。
import pandas as pd
df1 = pd.DataFrame([[78.375,23.125006,2.1265152,1],[78.375,23.20834,2],23.291674,24.95834,0.31348512,25.041674,3]],columns=['lat','lon','chlor_a','month'])
df2 = pd.DataFrame([['15-02-70',9.5,156.5,303.672],['15-02-70',157.5,311.013],158.5,321.322],10.5,155.5,305.066]],columns=['DATE','LAT','LON','FCO2_AVE_WEIGHTED'])
df2['DATE'] = pd.to_datetime(df2['DATE'])
df2['month'] = pd.DatetimeIndex(df2['DATE']).month
df2 = df2.rename(str.lower,axis='columns')
df2 = df2.merge(df1,on=['lat','month'],how='outer')
print(df2)
我希望它能对您有所帮助。熊猫确实是一个功能强大的库,可以轻松实现所需的功能。