具有填充功能的GroupBy删除组,并且不将组放入索引

时间:2019-10-01 08:53:36

标签: python pandas pandas-groupby

自从我将代码从一台计算机移植到另一台计算机以来,我一直遇到一个非常奇怪的问题。我在此系统上使用的熊猫版本为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()并保留我的分组。

1 个答案:

答案 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