我在this开放数据集上进行了练习。使用过的数据帧的基本描述:
其中包含有关数据可用性的信息:dataavail
Timestamp Availability
201605252300 True
201605252315 False
201605252015 True
包含实际数据weatherdata
SquareID Timestamp Precipitation
25 201605252300 1
问题是,如果没有下雨,那么{em>不标记为weatherdata.Precipitation
为0
,但是weatherdata
。但是,并非所有缺失的数据都意味着没有降水,也可能意味着技术故障。那是dataavail
进来的地方。如果Timestamp
中的data
Availability
是False
,那就意味着存在技术问题#39;没有数据。如果Timestamp
中的data
Availability
为True
,则表示降水实际为0.
我想结合这两个数据帧,以便我有一个描述全部选项的数据框,即如下所示:
Timestamp Availability Precipitation
201605252300 True 1 #if the availability is True, and there's rain, data can be pulled from weatherdata
201605252315 False NaN #if there's a technical issue, data can stay NaN for further imputation
201605252015 True 0 #if the data's availability is True, but there's no entry fot it in weatherdata, it should be 0
现在要实现这一点,我试图将它们合并为
precip_alldata = pd.merge(weatherdata, dataavail, on=['Timestamp'], how='right')
根据我的理解,根据documentation这应该
右:仅使用右框中的键(SQL:右外连接)
但这就是我想要的,因为在dataavail
中有所有可能时间戳的可用性数据。我也理解,在可用性为True的情况下,这还没有用0代替NaN' s。但是,输出precip_alldata
没有任何行,其中Availability
为True
,但Precipitation
为NaN
,这让我相信在我的思考中,有些东西已经消失了。查看原始数据集,我可以清楚地看到没有降水的情况,Avaiability
是True
。所以我的输出看起来像
Timestamp Availability Precipitation
201605252300 True 1
201605252315 False Nan
在我的理解中/我想要的是
Timestamp Availability Precipitation
201605252300 True 1
201605252315 False NaN
201605252015 True NaN
在第一步中。 你能否指出我思考的罪魁祸首?谢谢!
答案 0 :(得分:-1)
尝试以下方法:
precip_alldata = pd.merge(dataavail, weatherdata, how='left')
precip_alldata[['TimeStamp', 'Availability', 'Precipitation']]
使用左连接将为您提供左数据框(dataavail)中的所有行。
输出:
Timestamp Availability Precipitation
0 201605252300 True 1.0
1 201605252315 False NaN
2 201605252015 True NaN