熊猫按类别间隔进行过滤

时间:2019-06-11 08:43:46

标签: python pandas

我创建一个数据框并将一列按时间间隔分类:

df_test = pd.DataFrame({'col': [0,1,2,3,4,5,6]})
df_test['cat']= pd.cut(df_test['col'],[-1.,0.,3.,10.])
df_test

        col     cat
    0   0   (-1.0, 0.0]
    1   1   (0.0, 3.0]
    2   2   (0.0, 3.0]
    3   3   (0.0, 3.0]
    4   4   (3.0, 10.0]
    5   5   (3.0, 10.0]
    6   6   (3.0, 10.0]

现在我想使用cat列过滤此数据框:

df_test[df_test['cat'] == pd.Interval(left=1., right=2.)]

    col     cat
1   1   (0.0, 3.0]
2   2   (0.0, 3.0]
3   3   (0.0, 3.0]

用(1.,2.]进行相等性检查会产生此结果的原因是什么?我期望得到一个空结果,因为该间隔在数据框中不存在。

我应该使用其他方法进行过滤吗?

3 个答案:

答案 0 :(得分:0)

您的函数正在运行,该语法意味着现在他过滤了所有内容,其中intervall位于(1, 2)中,因此在您的情况下,直到0.0内有1-2时,0.0为止,因此如果您有,则返回true尝试: df_test[df_test['cat'] == pd.Interval(left=10, right=20)] 您将获得一个空的datframe

如果要查看精确匹配,也许最好分割间隔?

答案 1 :(得分:0)

要实现完全匹配,请使用黑客解决方案-将两者都转换为字符串:

a = df_test[df_test['cat'].astype(str) == str(pd.Interval(left=1., right=2.))]

或使用apply

a = df_test[df_test['cat'].apply(lambda x: x == pd.Interval(left=1., right=2.))]
print (a)
Empty DataFrame
Columns: [col, cat]
Index: []

here

是为什么要为支票成员资格实施更多信息

答案 2 :(得分:0)

列表理解可提供您期望的结果:

var array = [{id:"1", tot:20},{id:"2", tot:30},{id:"1", tot:20},{id:"3", tot:50}];

var res = array.reduce(function (agg, obj) {
  var objForId = agg.filter(function (idObj) { return idObj.id === obj.id})[0]
  
  if (objForId) {
    objForId.total += obj.tot;
  } else {
    agg.push({
      id: obj.id,
      total: obj.tot
    })
  }

  return agg;
}, [])

console.log(res)

输出:

# Read two inputs from users
a = int(input("Enter your First Number"))
b = int(input("Enter your Second Number"))

print ("Result: {}".format(a+b))