使用pd.Grouper按周分组时,如何获取DataFrame指定列的唯一值?
解决按周提取DataFrame列唯一值的问题
嘿,我明白你遇到的问题了——DataFrameGroupBy对象确实没有unique()方法,因为这个方法是属于单个Series的,而你现在是对整个DataFrame分组,所以直接调用会报错。不过咱们有几种简单的方法可以实现你想要的效果:
方法1:使用agg()配合pd.Series.unique
这是最直接的方式,通过agg()函数对每个列单独应用Series的unique()方法:
df_unique_list = df.groupby(pd.Grouper(freq="W"))[['A', 'B']].agg(pd.Series.unique)
这里注意把列名写成列表['A', 'B'],这在新版本Pandas里更规范,也能避免潜在的警告。运行后你会得到一个以周为索引的DataFrame,A、B列分别存储对应周的唯一值数组。
方法2:用lambda函数转成列表(更易处理)
如果你希望结果是列表格式(而不是numpy数组),可以用lambda函数包装一下:
df_unique_list = df.groupby(pd.Grouper(freq="W"))[['A', 'B']].agg(lambda x: list(pd.unique(x)))
这样后续处理这些唯一值的时候会更方便,比如遍历或者判断元素是否存在。
可选:去除空值
如果你的数据里有NaN,想要在唯一值里排除它们,可以在lambda里加上dropna():
df_unique_list = df.groupby(pd.Grouper(freq="W"))[['A', 'B']].agg(lambda x: list(pd.unique(x.dropna())))
这样就能完美实现按周获取A、B列的唯一值啦~
内容的提问来源于stack exchange,提问作者Jeroen S
相关产品推荐
相关产品推荐

