gpt4 book ai didi

python - 试图理解为什么比较不起作用但过滤器起作用(Panda)

转载 作者:行者123 更新时间:2023-12-01 09:13:19 24 4
gpt4 key购买 nike

dfclean = dfclean[dfclean['Count'] > 1]

我用它来清除数据框中小于 1 的“计数”值。 “计数”列的值范围为 0-3,效果很好。

dfsorted = dfbottom.groupby("ST").filter(lambda dfbottom:dfbottom.shape[0] > 1)

我用它来过滤掉 < 1 的“ST”实例。我只想要数据框中具有 > 1 个实例的值。我在 stackoverflow 中翻阅了一段时间后使用了它,并找到了正确的代码来理解。

dfbottom = dfbottom[dfbottom.groupby("ST").count() > 1]

如果可能的话,我需要帮助理解的是为什么这不起作用?在我看来,这应该执行类似的清理工作(查看“ST”列,对值进行计数,其中发现值> 1 保留数据。相反,发生的情况是 Dataframe 最终得到所有 NaN 值。如果我运行只是 dfbottom 代码我得到了一个“True”和“False”表格。该表格是正确的,但我显然缺少使用该数据创建新数据框的正确格式。

最佳答案

.count 聚合 DataFrame 存在问题。

解决方案是使用GroupBy.transform返回与原始 DataFrame 大小相同的 Series,因此可能进行过滤:

dfbottom = dfbottom[dfbottom.groupby("ST")['ST'].transform('count') > 1]

示例:

dfbottom = pd.DataFrame({'ST':list('abbbcec')})
print (dfbottom)
ST
0 a
1 b
2 b
3 b
4 c
5 e
6 c

dfbottom = dfbottom[dfbottom.groupby("ST")['ST'].transform('count') > 1]
print (dfbottom)
ST
1 b
2 b
3 b
4 c
6 c

详细信息:

print (dfbottom.groupby("ST")['ST'].transform('count'))
0 1
1 3
2 3
3 3
4 2
5 1
6 2
Name: ST, dtype: int64

print (dfbottom.groupby("ST")['ST'].transform('count') > 1)
0 False
1 True
2 True
3 True
4 True
5 False
6 True
Name: ST, dtype: bool
<小时/>

如果想按聚合值过滤:

print (dfbottom.groupby("ST")['ST'].count())
ST
a 1
b 3
c 2
e 1
Name: ST, dtype: int64

print (dfbottom.groupby("ST")['ST'].count() > 1)
ST
a False
b True
c True
e False
Name: ST, dtype: bool

print (dfbottom[dfbottom.groupby("ST")['ST'].count() > 1])

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

这不起作用,因为 bool 掩码的大小不同 - 在此示例中长度为 4 而原始 DataFrame7

关于python - 试图理解为什么比较不起作用但过滤器起作用(Panda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51463559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com