【问题标题】:Filter by a BIN in Pandas在 Pandas 中按 BIN 过滤
【发布时间】:2020-02-29 14:26:28
【问题描述】:

所以我在 pandas 数据框中创建了一些关于金额的分箱。然后我想按垃圾箱过滤以执行以下操作:

df_ap['BINS'] == '(70000.0, 80000.0]'

这似乎不起作用。我可以在我的数据框中清楚地看到该值。我从数据框本身复制了它。我可以对其进行分组,但我无法过滤该字段。我做错了吗?

【问题讨论】:

  • 你可以试试df_ap['BINS'].between(70000,80000) 吗?或df_ap['BINS'].astype(str)=='(70000.0, 80000.0]'
  • 由于您看到的 bin 是间隔而不是实际的字符串,您可能需要先将它们转换为字符串或使用 between
  • 你的 astype str 工作得很好!
  • 很高兴它起作用了,您可能还想尝试下面的@Jezrael 答案,这是选择间隔的好方法

标签: pandas dataframe filtering


【解决方案1】:

比较Interval:

df_ap = pd.DataFrame({'A':[90000,50000,75000.0]})
df_ap['BINS'] = pd.cut(df_ap['A'], bins=np.arange(0, 100000, 10000).astype(float))
print (df_ap)
         A                BINS
0  90000.0  (80000.0, 90000.0]
1  50000.0  (40000.0, 50000.0]
2  75000.0  (70000.0, 80000.0]

print (pd.Interval(left=70000, right=80000))
(70000, 80000]

mask = df_ap['BINS'] == pd.Interval(left=70000, right=80000)
print (mask)
0    False
1    False
2     True
Name: BINS, dtype: bool

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2016-08-21
    相关资源
    最近更新 更多