.NET中对DataFrame应用双重过滤的更便捷方法咨询
在.NET中优化DataFrame双重过滤的实现方式
你可以通过两种更简洁的方式实现双重过滤,解决你之前遇到的问题:
方式一:正确的链式调用
你之前链式调用失败大概率是因为第二次Filter仍在引用原始DataFrame而非前一次过滤的结果。正确的链式写法应该基于每次过滤后的结果来获取列:
DataFrame origFrame = DataFrame.LoadCsv("sample.csv"); var filteredFrame = origFrame .Filter(origFrame["Column1"].ElementwiseGreaterThanOrEqual(1000)) .Filter(filteredDf => filteredDf["Column2"].ElementwiseIsNotNull());
这种写法逻辑和你原来的两次赋值完全一致,但结构更紧凑。
方式二:合并条件单次过滤
通过ElementwiseAnd方法可以将两个布尔类型的过滤条件合并为一个PrimitiveDataFrameColumn<bool>,从而实现单次过滤,效率更高:
DataFrame origFrame = DataFrame.LoadCsv("sample.csv"); var filteredFrame = origFrame.Filter( origFrame["Column1"].ElementwiseGreaterThanOrEqual(1000) .ElementwiseAnd(origFrame["Column2"].ElementwiseIsNotNull()) );
如果需要更清晰的代码结构,也可以拆分条件变量:
DataFrame origFrame = DataFrame.LoadCsv("sample.csv"); var column1Condition = origFrame["Column1"].ElementwiseGreaterThanOrEqual(1000); var column2Condition = origFrame["Column2"].ElementwiseIsNotNull(); var filteredFrame = origFrame.Filter(column1Condition.ElementwiseAnd(column2Condition));
补充说明
- 布尔列的Elementwise系列方法(
ElementwiseAnd/ElementwiseOr等)专门用于合并多条件过滤,这就是你之前找不到的合并条件的方法。 - 合并条件的方式只需要遍历一次DataFrame,相比两次Filter的性能更优,数据量越大差异越明显。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

