Расширьте и заполните Pandas DataFrame, чтобы соответствовать другому - PullRequest
1 голос
/ 04 марта 2020

У меня есть два Pandas DataFrames A и B.

Они имеют идентичный индекс (недельные даты) до определенного момента: серия заканчивается в начале года для A и продолжается для количество наблюдений в кадре B. Мне нужно задать для кадра данных A такой же индекс, как и для кадра B, и заполнить каждый столбец своими последними значениями.

Заранее спасибо.

Тихон

РЕДАКТИРОВАТЬ: спасибо за совет по этому вопросу. Мне нужно, чтобы dfA_before посмотрел на dfB и стал dfA_after:

print(dfA_before)
a    b
0  10  100
1  20  200
2  30  300

print(dfB)
    a    b
0  11  111
1  22  222
2  33  333
3  44  444
4  55  555

print(dfA_after)
    a    b
0  10  100
1  20  200
2  30  300
3  30  300
4  30  300

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Это должно работать

import numpy as np
import pandas as pd

df1 = pd.DataFrame({'a':[10,20,30],'b':[100,200,300]})
df2 = pd.DataFrame({'a':[11,22,33,44,55],'c':[111,222,333,444,555]})

# solution
last = df1.iloc[-1].to_numpy()
df3 = pd.DataFrame(np.tile(last,(2,1)),
                   columns=df1.columns)

df4 = df1.append(df3,ignore_index=True)

# method 2
for _ in range(len(df2)-len(df1)):
    df1.loc[len(df1)] = df1.loc[len(df1)-1]


# method 3
for _ in range(df2.shape[0]-df1.shape[0]):
    df1 = df1.append(df1.loc[len(df1)-1],ignore_index=True)

# result
    a    b
0  10  100
1  20  200
2  30  300
3  30  300
4  30  300
0 голосов
/ 05 марта 2020

Наверное, очень неэффективно - я новичок:

dfA_New = dfB.copy()
dfA_New.loc[:] = 0  
dfA_New.loc[:] = dfA.loc[:]
dfA_New.fillna(method='ffill', inplace = True)
dfA = dfA_New
...