При объединении Pandas DataFrames разных временных интервалов, Как заполнить NaN постоянными значениями

1

Я объединяю один Pandas DataFrame из LARGE временных интервалов в другой DataFrame из SMALL временных интервалов и хотел бы, чтобы объединенные значения столбцов оставались постоянными, а не NaN.
По мере приближения даты я бы хотел, чтобы население оставалось неизменным до тех пор, пока не будет обновлено, а не покажет NaN.

DataFrame 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

DataFrame 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, подобные этому (поскольку числа населения были бы постоянными в действительности)

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 123.456
959732340000000 106.640 106.650 106.640 106.650 123.456
959732880000000 106.660 106.660 106.660 106.660 124.834    
959733180000000 106.670 106.670 106.670 106.670 124.834
959733240000000 106.660 106.660 106.660 106.660 124.834
959734200000000 106.610 106.610 106.580 106.580 124.834
959734320000000 106.600 106.600 106.600 106.600 124.834
959735820000000 106.620 106.620 106.620 106.620 124.834
959736240000000 106.630 106.640 106.630 106.630 124.834
959736540000000 106.620 106.620 106.620 106.620 124.834
959736780000000 106.640 106.670 106.640 106.670 125.456
959736960000000 106.690 106.690 106.690 106.690 125.456
959743320000000 106.690 106.700 106.690 106.700 125.456
959745660000000 106.700 106.750 106.250 106.260 125.456
959745720000000 106.270 106.280 106.270 106.280 125.456
959745900000000 106.270 106.270 106.270 106.270 125.456  

================================================== =============
Я попытался сохранить номера столбцов столбцов B в виде списка и прокрутить столбец столбцов столбца A с помощью оператора if. Он ничего не делает.

series = [i for i in B['POPULATION']]
for i in A['POPULATION']:
    for k in series:
        if i == k:
            A['POPULATION'].fillna(k)
  • 0
    Есть какая-то проблема?
Теги:
pandas
dataframe

2 ответа

1
Лучший ответ

Вы можете использовать merge_asof:

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
  • 0
    С моей стороны это, кажется, просто делает всю колонку первым числом населения. 123,456 каждый номер вниз.
  • 0
    @Renoldus - Можешь проверить сейчас?
Показать ещё 4 комментария
0

Вы также можете попробовать this-

for i in A['Population']:
   if i != NaN:
      prev = i
   else:
      i = prev

Ещё вопросы

Сообщество Overcoder
Наверх
Меню