gpt4 book ai didi

python - 按时合并 Pandas 数据框和另一列

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:31 24 4
gpt4 key购买 nike

我有两个 pandas 数据框,我想将它们组合成一个数据框。以下是我的设置方式:

a = {'date':['1/1/2015 00:00','1/1/2015 00:15','1/1/2015 00:30'], 'num':[1,2,3]}
b = {'date':['1/1/2015 01:15','1/1/2015 01:30','1/1/2015 01:45'], 'num':[4,5,6]}

dfa = pd.DataFrame(a)
dfb = pd.DataFrame(b)

dfa['date'] = dfa['date'].apply(pd.to_datetime)
dfb['date'] = dfb['date'].apply(pd.to_datetime)

然后,我从每个时间戳中找到earliestlatest 时间戳,并创建一个新的数据帧,它只是一个date 系列:

earliest = min(dfa['date'].min(), dfb['date'].min())
latest = max(dfa['date'].max(), dfb['date'].max())

date_range = pd.date_range(earliest, latest, freq='15min')

dfd = pd.DataFrame({'date':date_range})

然后我想将它们全部合并到一个数据帧中,以 dfd 为基础,因为它将包含所有正确的时间戳。所以我合并了 dfddfa 一切都很好:

dfd = pd.merge(dfd, dfa, how = 'outer', on = 'date')

但是,当我将它与 dfb 合并时,date 系列变得很奇怪,我不知道为什么。

dfd = pd.merge(dfd, dfb, how = 'outer', on = ['date','num'])

...产量:

                  date  num
0 2015-01-01 00:00:00 1.0
1 2015-01-01 00:15:00 2.0
2 2015-01-01 00:30:00 3.0
3 2015-01-01 00:45:00 NaN
4 2015-01-01 01:00:00 NaN
5 2015-01-01 01:15:00 NaN
6 2015-01-01 01:30:00 NaN
7 2015-01-01 01:45:00 NaN
8 2015-01-01 01:15:00 4.0
9 2015-01-01 01:30:00 5.0
10 2015-01-01 01:45:00 6.0

我希望 4.0 填写 2015-01-01 01:15:00 时间段等,而不创建新行。

或者如果我尝试:

dfd = pd.merge(dfd, dfb, how = 'outer', on = 'date')

我得到:

                 date  num_x  num_y
0 2015-01-01 00:00:00 1.0 NaN
1 2015-01-01 00:15:00 2.0 NaN
2 2015-01-01 00:30:00 3.0 NaN
3 2015-01-01 00:45:00 NaN NaN
4 2015-01-01 01:00:00 NaN NaN
5 2015-01-01 01:15:00 NaN 4.0
6 2015-01-01 01:30:00 NaN 5.0
7 2015-01-01 01:45:00 NaN 6.0

这也不是我想要的(只想要一个 num 列)。任何帮助将不胜感激。

最佳答案

dfa.set_index('date').combine_first(dfb.set_index('date')) \
.asfreq('15T').reset_index()

date num
0 2015-01-01 00:00:00 1.0000
1 2015-01-01 00:15:00 2.00
2 2015-01-01 00:30:00 3.00
3 2015-01-01 00:45:00 nan
4 2015-01-01 01:00:00 nan
5 2015-01-01 01:15:00 4.00
6 2015-01-01 01:30:00 5.00
7 2015-01-01 01:45:00 6.00

另一种解决方案

dfa.append(dfb).set_index('date').asfreq('15T').reset_index()

关于python - 按时合并 Pandas 数据框和另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com