我有一段pandas代码,用于1.0.5版。以下是我的问题的一个简化、独立的示例:
import pandas as pd
df = pd.DataFrame(data=[
('bk1', 10),
('bk1', None),
('bk1', 13),
('bk1', None),
('bk2', None),
('bk2', 14),
('bk3', 12),
('bk3', None),
], columns=('book', 'price'))
grouped = df.groupby(['book'], as_index=False, sort=False)
df = grouped.fillna(method='ffill')
print(df)
在本例中,我们有一个图书销售列表,其中缺少一些价格。我们试图通过使用前一行来填充缺少的数据,其中该行是同一本书
在Pandas 1.0.5中,这将生成具有两列的数据帧:
book price
0 bk1 10.0
1 bk1 10.0
2 bk1 13.0
3 bk1 13.0
4 bk2 NaN
5 bk2 14.0
6 bk3 12.0
7 bk3 12.0
在Pandas 1.1.0中,这将删除book列,从而使输出不可用
price
0 10.0
1 10.0
2 13.0
3 13.0
4 NaN
5 14.0
6 12.0
7 12.0
我读了patch notes for version 1.1.0,找不到任何关于这一变化的评论
问题:
您可能会问的问题:
为什么不在没有groupby的情况下使用fillna
在本例中,包含bk2的第一行没有价格,但是用上一行(即bk1的价格)填充它没有任何意义
为什么使用ffill而不是删除NA值
我真正的代码是处理timeseries数据的,而ffill是表达上一次已知观察结果的最自然的方式
通过使用update函数,您可以采取不同的方法来解决这个问题(与Nick ODell提出的解决方案不同):
这也适用于两个版本
变通办法
groupby可以表示为:
这两个版本都适用
原因
此问题可能与此更改有关,尽管它发生在不同的版本中:
(Source。)
相关问题 更多 >
编程相关推荐