按组填充数据帧中的所有变量

时间:2018-09-10 19:27:33

标签: python pandas

考虑这个简单的例子

df = pd.DataFrame({'date' : [pd.to_datetime('2018-01-01'), 
                             pd.to_datetime('2018-01-01'), 
                             np.nan, 
                             pd.to_datetime('2018-01-01')],
                   'group' : ['a',np.nan,'b','b'],
                   'value' : [1,2,3,np.nan],
                   'value_useless' : [2,2,np.nan,2]})

df
Out[101]: 
        date group   value  value_useless
0 2018-01-01     a 1.00000        2.00000
1 2018-01-01   NaN 2.00000        2.00000
2        NaT     b 3.00000            nan
3 2018-01-01     b     nan        2.00000

在这里,我要按组转发填充数据框中的所有变量。

根据文档(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.fillna.html),我应该能够这样做:

df.groupby('group').fillna(method = 'ffill', inplace = True)
Out[110]: 
Empty DataFrame
Columns: []
Index: []

疯狂的东西。 这是什么问题? 谢谢!

1 个答案:

答案 0 :(得分:2)

df.groupby('group')正在产生尚未分配名称的groupby对象。然后,您正在使用fillna来进行inplace=True。当您使用inplace=True时,您将更改调用数据帧并返回任何内容。 然后,您将调用数据帧扔到空白处。

df.groupby('group').ffill()

你还好吧。


另一种查看方式:

# Copy                       Altered Copy In-Place... returning None
# |                          |
# v                          v
df.copy().set_index('group', inplace=True)

副本去哪了?现在,该对象正坐在内存中等待垃圾收集器。