我创建一个数据框并将一列按时间间隔分类:
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.]进行相等性检查会产生此结果的原因是什么?我期望得到一个空结果,因为该间隔在数据框中不存在。
我应该使用其他方法进行过滤吗?
答案 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: []
是为什么要为支票成员资格实施更多信息
答案 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))