我正在分析一个DataFrame并获取我想要放入特定存储桶的时间计数(0-10秒,10-30秒等)。
这是一个简化的例子:
import pandas as pd
filter_values = [0, 10, 20, 30] # Bucket Values for pd.cut
#Sample Times
df1 = pd.DataFrame([1, 3, 8, 20], columns = ['filtercol'])
#Use cut to get counts for each bucket
out = pd.cut(df1.filtercol, bins = filter_values)
counts = pd.value_counts(out)
print counts
以上版画:
(0, 10] 3
(10, 20] 1
dtype: int64
您会注意到它没有显示(20,30)的任何值。这是一个问题,因为我想将它作为零输入到我的输出中。我可以使用以下代码处理它:
bucket1=bucket2=bucket3=0
if '(0, 10]' in counts:
bucket1=counts['(0, 10]']
if '(10, 20]' in counts:
bucket2=counts['(10, 30]']
if '(20, 30]' in counts:
bucket3=counts['(30, 60]']
print bucket1, bucket2, bucket3
但我想要一个更简洁的方法,我可以使用:
print counts['(0, 10]'], counts['(10, 30]'], counts['(30, 60]']
理想情况下,打印基于filter_values中的值,因此它们只位于代码中的一个位置。是的我知道我可以更改打印以使用filter_values [0] ...
最后使用cut时有一种指定无穷大的方法,所以最后一个桶的值都大于60?
干杯, 斯蒂芬
答案 0 :(得分:1)
您可以reindex按分类级别
In [11]: pd.value_counts(out).reindex(out.levels, fill_value=0)
Out[11]:
(0, 10] 3
(10, 20] 1
(20, 30] 0
dtype: int64