自从我将代码从一台计算机移植到另一台计算机以来,我一直遇到一个非常奇怪的问题。我在此系统上使用的熊猫版本为0.25.1,但是不确定我以前使用的熊猫版本。
问题如下:
我创建了一个简单的,未排序的(模拟)数据框,我要在该数据框上对值进行排序并向前填充所有NaN值。
In [1]: import pandas as pd
...: import numpy as np
In [2]: test = pd.DataFrame({"group" : ["A", "A", "A", "B", "B", "B", "C", "C"],
...: "count" : [2, 3, 1, 2, 1, 3, 1, 2],
...: "value" : [10, np.nan, 30, np.nan, 19, np.nan, 25, np.nan]})
In [3]: test
Out[3]:
group count value
0 A 2 10.0
1 A 3 NaN
2 A 1 30.0
3 B 2 NaN
4 B 1 19.0
5 B 3 NaN
6 C 1 25.0
7 C 2 NaN
但是,当我这样做时,我会丢失整个“组”列,并且该列也不会再次出现在索引中。
In [4]: test.sort_values(["group", "count"]).groupby("group").ffill()
Out[4]:
count value
2 1 30.0
0 2 10.0
1 3 10.0
4 1 19.0
3 2 19.0
5 3 19.0
6 1 25.0
7 2 25.0
我也尝试通过fillna使用以下内容,但这给了我相同的结果:
In [5]: test.sort_values(["group", "count"]).groupby("group").fillna(method = "ffill")
Out[5]:
count value
2 1 30.0
0 2 10.0
1 3 10.0
4 1 19.0
3 2 19.0
5 3 19.0
6 1 25.0
7 2 25.0
有人知道我在做什么错吗?问题似乎与ffill方法有关,因为我可以在groupby上使用.mean()并保留我的分组。
答案 0 :(得分:4)
IICU,您必须使用“ update”将结果返回到数据框
test.update(test.sort_values(["group", "count"]).groupby("group").ffill())
print(test)
输出
group count value
0 A 2 10.0
1 A 3 10.0
2 A 1 30.0
3 B 2 19.0
4 B 1 19.0
5 B 3 19.0
6 C 1 25.0
7 C 2 25.0