Python 合并不同时间间隔的数据帧时,如何用常量值填充NAN
我正在将一个大时间间隔的数据帧合并到另一个小时间间隔的数据帧中,并希望合并列的值保持不变,而不是NaN。Python 合并不同时间间隔的数据帧时,如何用常量值填充NAN,python,pandas,dataframe,Python,Pandas,Dataframe,我正在将一个大时间间隔的数据帧合并到另一个小时间间隔的数据帧中,并希望合并列的值保持不变,而不是NaN。 随着日期的上升,我希望人口保持不变,直到更新,而不是显示 数据帧A DATE, Close, High, Low, Open 959731080000000 106.600 106.600 106.600 106.600 959731380000000 106.650 106.650 106.650 106.650 959732340000000 106.640 106.
随着日期的上升,我希望人口保持不变,直到更新,而不是显示 数据帧A
DATE, Close, High, Low, Open
959731080000000 106.600 106.600 106.600 106.600
959731380000000 106.650 106.650 106.650 106.650
959732340000000 106.640 106.650 106.640 106.650
959732880000000 106.660 106.660 106.660 106.660
959733180000000 106.670 106.670 106.670 106.670
959733240000000 106.660 106.660 106.660 106.660
959734200000000 106.610 106.610 106.580 106.580
959734320000000 106.600 106.600 106.600 106.600
959735820000000 106.620 106.620 106.620 106.620
959736240000000 106.630 106.640 106.630 106.630
959736540000000 106.620 106.620 106.620 106.620
959736780000000 106.640 106.670 106.640 106.670
959736960000000 106.690 106.690 106.690 106.690
959743320000000 106.690 106.700 106.690 106.700
959745660000000 106.700 106.750 106.250 106.260
959745720000000 106.270 106.280 106.270 106.280
959745900000000 106.270 106.270 106.270 106.270
数据帧B
DATE, Population
959731080000000 123.456
959732880000000 124.834
959736780000000 125.456
将B合并为A
A = A.merge(B, how='left')
DATE, Close, High, Low, Open, Population
959731080000000 106.600 106.600 106.600 106.600 123.456
959731380000000 106.650 106.650 106.650 106.650 NaN
959732340000000 106.640 106.650 106.640 106.650 NaN
959732880000000 106.660 106.660 106.660 106.660 124.834
959733180000000 106.670 106.670 106.670 106.670 NaN
959733240000000 106.660 106.660 106.660 106.660 NaN
959734200000000 106.610 106.610 106.580 106.580 NaN
959734320000000 106.600 106.600 106.600 106.600 NaN
959735820000000 106.620 106.620 106.620 106.620 NaN
959736240000000 106.630 106.640 106.630 106.630 NaN
959736540000000 106.620 106.620 106.620 106.620 NaN
959736780000000 106.640 106.670 106.640 106.670 125.456
959736960000000 106.690 106.690 106.690 106.690 NaN
959743320000000 106.690 106.700 106.690 106.700 NaN
959745660000000 106.700 106.750 106.250 106.260 NaN
959745720000000 106.270 106.280 106.270 106.280 NaN
959745900000000 106.270 106.270 106.270 106.270 NaN
我希望人口数量像这样填充NaN单元格(因为人口数量在现实中是恒定的)
===============================================================================我尝试将B列的填充数存储为一个列表,并使用if语句在a列的填充列中循环。它什么也不做
series = [i for i in B['POPULATION']]
for i in A['POPULATION']:
for k in series:
if i == k:
A['POPULATION'].fillna(k)
您可以使用:
你也可以试试这个-
for i in A['Population']:
if i != NaN:
prev = i
else:
i = prev
有什么问题吗?在我这方面,这似乎只是使整个列成为第一个人口数字。123.456一路往下看每个数字。@Renoldus-你现在可以检查吗?然后在
merge\u asof
之前使用B=B.sort\u values('DATE')
。我的日期和我想象的不一样。我删除了这个问题,因为我在“日期”栏中犯了错误。我不想因为一个糟糕的问题而得票。也许你仍然会得到最好答案的分数。谢谢你的帮助。
A = pd.merge_asof(A,B,on='DATE')
print (A)
DATE Close High Low Open Population
0 959731080000000 106.60 106.60 106.60 106.60 123.456
1 959731380000000 106.65 106.65 106.65 106.65 123.456
2 959732340000000 106.64 106.65 106.64 106.65 123.456
3 959732880000000 106.66 106.66 106.66 106.66 124.834
4 959733180000000 106.67 106.67 106.67 106.67 124.834
5 959733240000000 106.66 106.66 106.66 106.66 124.834
6 959734200000000 106.61 106.61 106.58 106.58 124.834
7 959734320000000 106.60 106.60 106.60 106.60 124.834
8 959735820000000 106.62 106.62 106.62 106.62 124.834
9 959736240000000 106.63 106.64 106.63 106.63 124.834
10 959736540000000 106.62 106.62 106.62 106.62 124.834
11 959736780000000 106.64 106.67 106.64 106.67 125.456
12 959736960000000 106.69 106.69 106.69 106.69 125.456
13 959743320000000 106.69 106.70 106.69 106.70 125.456
14 959745660000000 106.70 106.75 106.25 106.26 125.456
15 959745720000000 106.27 106.28 106.27 106.28 125.456
16 959745900000000 106.27 106.27 106.27 106.27 125.456
for i in A['Population']:
if i != NaN:
prev = i
else:
i = prev