Pandas / Python数据帧 - 在合并逻辑中丢失

时间:2017-03-16 09:48:16

标签: python pandas join merge right-join

我在this开放数据集上进行了练习。使用过的数据帧的基本描述:

其中包含有关数据可用性的信息:dataavail

Timestamp    Availability
201605252300 True
201605252315 False
201605252015 True

包含实际数据weatherdata

的那个
SquareID Timestamp    Precipitation
25       201605252300 1

问题是,如果没有下雨,那么{em>不标记为weatherdata.Precipitation0,但是weatherdata。但是,并非所有缺失的数据都意味着没有降水,也可能意味着技术故障。那是dataavail进来的地方。如果Timestamp中的data AvailabilityFalse,那就意味着存在技术问题#39;没有数据。如果Timestamp中的data AvailabilityTrue,则表示降水实际为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没有任何行,其中AvailabilityTrue,但PrecipitationNaN,这让我相信在我的思考中,有些东西已经消失了。查看原始数据集,我可以清楚地看到没有降水的情况,AvaiabilityTrue。所以我的输出看起来像

Timestamp    Availability Precipitation
201605252300 True         1
201605252315 False        Nan

在我的理解中/我想要的是

Timestamp    Availability Precipitation
201605252300 True         1
201605252315 False        NaN
201605252015 True         NaN

在第一步中。 你能否指出我思考的罪魁祸首?谢谢!

1 个答案:

答案 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