首页 文章

Python Pandas - 使用前一列的值向前填充整行

提问于
浏览
3

熊猫开发的新手 . 如何使用之前看到的列中包含的值转发填充DataFrame?

自包含的例子:

import pandas as pd
import numpy as np
O = [1, np.nan, 5, np.nan]
H = [5, np.nan, 5, np.nan]
L = [1, np.nan, 2, np.nan]
C = [5, np.nan, 2, np.nan]
timestamps = ["2017-07-23 03:13:00", "2017-07-23 03:14:00", "2017-07-23 03:15:00", "2017-07-23 03:16:00"]
dict = {'Open': O, 'High': H, 'Low': L, 'Close': C}
df = pd.DataFrame(index=timestamps, data=dict)
ohlc = df[['Open', 'High', 'Low', 'Close']]

这会产生以下DataFrame:

print(ohlc)
                     Open  High  Low  Close
2017-07-23 03:13:00   1.0   5.0  1.0    5.0
2017-07-23 03:14:00   NaN   NaN  NaN    NaN
2017-07-23 03:15:00   5.0   5.0  2.0    2.0
2017-07-23 03:16:00   NaN   NaN  NaN    NaN

我想从最后一个DataFrame转到这样的事情:

Open  High  Low  Close
2017-07-23 03:13:00   1.0   5.0  1.0    5.0
2017-07-23 03:14:00   5.0   5.0  5.0    5.0
2017-07-23 03:15:00   5.0   5.0  2.0    2.0
2017-07-23 03:16:00   2.0   2.0  2.0    2.0

因此,“关闭”前向中先前看到的值将填满整行,直到看到新的填充行 . 这样填充“关闭”列非常简单,如下所示:

column2fill = 'Close'
ohlc[column2fill] = ohlc[column2fill].ffill()
print(ohlc)
                     Open  High  Low  Close
2017-07-23 03:13:00   1.0   5.0  1.0    5.0
2017-07-23 03:14:00   NaN   NaN  NaN    5.0
2017-07-23 03:15:00   5.0   5.0  2.0    2.0
2017-07-23 03:16:00   NaN   NaN  NaN    2.0

但有没有办法填充03:14:00和03:16:00行与这些行的'关闭'值?有没有办法在一步中使用一个前向填充而不是先填充“关闭”列?

1 回答

  • 2

    看来你需要assignffill 然后 bfill 每行 axis=1 ,但必要的完整 NaN 行:

    df = ohlc.assign(Close=ohlc['Close'].ffill()).bfill(axis=1)
    print (df)
                         Open  High  Low  Close
    2017-07-23 03:13:00   1.0   5.0  1.0    5.0
    2017-07-23 03:14:00   5.0   5.0  5.0    5.0
    2017-07-23 03:15:00   5.0   5.0  2.0    2.0
    2017-07-23 03:16:00   2.0   2.0  2.0    2.0
    

    同样如下:

    ohlc['Close'] = ohlc['Close'].ffill()
    df = ohlc.bfill(axis=1)
    print (df)
                         Open  High  Low  Close
    2017-07-23 03:13:00   1.0   5.0  1.0    5.0
    2017-07-23 03:14:00   5.0   5.0  5.0    5.0
    2017-07-23 03:15:00   5.0   5.0  2.0    2.0
    2017-07-23 03:16:00   2.0   2.0  2.0    2.0
    

相关问题