熊猫使用groupby填充缺失值

时间:2019-08-05 16:00:04

标签: pandas fillna

我有一个按日期和代码分组的各种指标表。我正在尝试使用前一天的数据或如果不可用的话-每个代码的第二天的数据填充缺失值。

问题是当我按“代码”和“日期”分组时,什么也没发生

df = pd.DataFrame([['2019-05-01', 'APL', 15951, 303, 49],  
['2019-05-02', 'APL', 16075, 301, 46],  
['2019-05-03', 'APL', np.nan, 300, 45],  
['2019-05-04', 'APL', 15868, 298.8, 33],  
['2019-05-01', 'MSK', 2222, np.nan, np.nan],  
['2019-05-02', 'MSK', 2224, 243, 53],  
['2019-05-03', 'MSK', 2266, 233, 33],  
['2019-05-04', 'MSK', np.nan, 253, 55]],  
columns=['Date', 'Code', 'Price', 'Volume', 'ATM'])

这是我正在尝试的:

df.groupby(['Code','Date'])['Price','Volume', 'ATM'].fillna(method = 'ffill')

3 个答案:

答案 0 :(得分:1)

您需要:

df.groupby(['Code']).apply(lambda x: x.ffill().bfill())

输出:

    Code      Date  Price   Volume  ATM
0   APL 2019-05-01  15951.0 303.0   49.0
1   APL 2019-05-02  16075.0 301.0   46.0
2   APL 2019-05-03  16075.0 300.0   45.0
3   APL 2019-05-04  15868.0 298.8   33.0
4   MSK 2019-05-01  2222.0  243.0   53.0
5   MSK 2019-05-02  2224.0  243.0   53.0
6   MSK 2019-05-03  2266.0  233.0   33.0
7   MSK 2019-05-04  2266.0  253.0   55.0

如果您按['Date', 'Code']分组,则每天都会成为一个组,并且在该组中,将不会缺少任何值。

答案 1 :(得分:0)

这是您可以做的:

df.set_index(['Date', 'Code'], inplace=True)
df['Price'].fillna(method='ffill', inplace=True)
df

enter image description here

答案 2 :(得分:0)

我要应用到特定的列。

for col in list_of_cols:  # Replace with your list of column name
    df[col] = df.groupby('Code')[col].transform(lambda x: x.ffill().bfill())
相关问题