【发布时间】:2021-12-06 19:11:35
【问题描述】:
我正在使用 pd.cut 和分箱数据。在这一步之后,我找到了每个 bin 中数据的平均值,如果两个 bin 之间的平均值差异低于阈值,我想将两个 bin 合并在一起。
import pandas as pd
df = pd.DataFrame([{ 'col1': 7, 'val': 2},
{'col1': 20, 'val': 22},
{'col1': 11, 'val': 12},
{ 'col1': 9, 'val': 13},
{ 'col1': 14, 'val': 11}])
df['bin1']=pd.cut(df['col1'], 3)
df2 = pd.DataFrame(df.groupby('bin1')['val'].mean())
threshold = 5
输出:
val
bin1
(6.987, 11.333] 9
(11.333, 15.667] 11
(15.667, 20.0] 22
如果 val 的均值差小于阈值 (5),那么我想合并 bin。
所以现在的新垃圾箱应该是:
bin1
(6.987, 15.667]
(15.667, 20.0]
我不知道怎么做最后一步.. 谢谢!
【问题讨论】:
-
bin 是否必须连续才能合并?如果两个以上的 bin 在彼此的均值范围内,您会怎么做,它们会合并在一起吗?
-
如果最后一个 bin 的意思是
15,这比第二个 bin 多4。你会将它与前两个 bin 合并吗? -
@mitoRibo:是的,bin 需要连续才能合并。
-
@QuangHoang:我比较了相邻的垃圾箱。当然,当我合并垃圾箱时,平均值会有所变化。但通常情况下,我在数据中看到的 bin 之间的平均值差异要么非常小,要么非常大。所以我必须相应地选择一个阈值
标签: python pandas dataframe cut bin