I have a dataframe like this:
df.head()
day time resource_record
0 27 00:00:00 AAAA
1 27 00:00:00 A
2 27 00:00:00 AAAA
3 27 00:00:01 A
4 27 00:00:02 A
我想找出某些resource_records出现的次数。
我的第一次尝试是使用value_counts()
返回的Series,看起来很不错,但是后来发现无法排除一些标签,因为dask.Series
中没有实现drop()
方法。
所以我尝试只打印所需标签:
for row in df.resource_record.value_counts().iteritems():
if row[0] in ['AAAA']:
continue
print('\t{0}\t{1}'.format(row[1], row[0]))
这个方法可以正常工作,但是如果我想要进一步处理这些数据并真正清理它们呢?所以我搜索了一下文档,发现了mask()
,但这种方法也有点笨拙:
records = df.resource_record.mask(df.resource_record.map(lambda x: x in ['AAAA'])).value_counts()
我正在寻找一种方法,可以只计算单个值,但是count()
会计算所有不是NaN的值。
然后我发现了str.contains()
,但我不知道如何处理此代码返回的未记录标量类型:
print(df.resource_record.str.contains('A').sum())
输出:
dd.Scalar<series-..., dtype=int64>
但是即使查看了Scalar在dask/dataframe/core.py
中的代码,我也没有找到获取它的值的方法。
你如何高效地计算数据框中特定值集合的出现次数?
dask.dataframe.drop
仅支持axis=1
。在数据框上进行删除可能是一种解决方案。 - vollkorn.compute()
。 - mdurant.compute()
,但是从文档中没有明确得知它将对我有所帮助。 - vollkorn