【发布时间】:2020-09-17 09:23:43
【问题描述】:
我遇到了一些意想不到的 Pandas groupby-apply 结果,但我无法找出确切的原因。
下面我必须是除了 2 个值的排序之外的数据帧。 df1 产生我期望的结果,但 df2 产生完全不同的结果。
import numpy as np
df1 = pd.DataFrame({'group_col': [0.0, np.nan, 0.0, 0.0], 'value_col': [2,2,2,2]})
df2 = pd.DataFrame({'group_col': [np.nan, 0.0, 0.0, 0.0], 'value_col': [2,2,2,2]})
df1:
group_col value_col
0 0.0 2
1 NaN 2
2 0.0 2
3 0.0 2
df2:
group_col value_col
0 NaN 2
1 0.0 2
2 0.0 2
3 0.0 2
当我按group_col 分组并对每个组的value_col 进行value_counts 时,包括重新索引以将所有可能的值包含在结果中,我得到的df1 如下:
df1.groupby('group_col').value_col.apply(lambda x: x.value_counts().reindex(index=[1,2,3]))
group_col
0.0 1 NaN
2 3.0
3 NaN
Name: value_col, dtype: float64
它正确地找到 1 个组并返回一个多索引系列,其中每个可能的值都有 value_counts。但是当我在 df2 上运行相同的程序时,我得到了完全不同的结果:
0 NaN
1 NaN
2 3.0
3 NaN
Name: value_col, dtype: float64
这里的结果包含一个与原始 DataFrame 匹配的索引,而不是我期望的多索引。我认为这可能与以 np.nan 开头的 group 列有关,但后来我尝试删除最后一行并再次得到预期的结果,所以显然原因是其他原因。
df2.head(3).groupby('group_col').value_col.apply(lambda x: x.value_counts().reindex(index=[1,2,3]))
group_col
0.0 1 NaN
2 2.0
3 NaN
Name: value_col, dtype: float64
这可能是什么原因造成的?
【问题讨论】:
标签: python pandas numpy dataframe pandas-groupby