danfojs icon indicating copy to clipboard operation
danfojs copied to clipboard

query operator

Open priyankat99 opened this issue 2 years ago • 1 comments

i see querying by logical operators has been deprecated: https://danfo.jsdata.org/api-reference/dataframe/danfo.dataframe.query#query-a-dataframe-using-logical-operators

is there a reason it was deprecated? i need to filter my DF to remove certain values like so:

 const filtered = this.datapoints.query({
        column: "ModelName",
        is: "==",
        to: "model"  
      }).query({
        column: "Timestamp",
        is: ">=",
        to: start  
      }).query({
        column: "Timestamp",
        is: "<=",
        to: end 
      }) 

was this logic deprecated because it is inefficient? im not sure how to achieve this with the updated logic in query. any help or clarification would be appreciated!

priyankat99 avatar Dec 26 '23 20:12 priyankat99

@priyankat99 you can't chain it but you can do this

const query = [
  {
    column: "ModelName",
    is: "==",
    to: "model"  
  },
  {
    column: "Timestamp",
    is: ">=",
    to: start  
  },
  {
    column: "Timestamp",
    is: "<=",
    to: end 
  }
];

const finalQuery = query.reduce((acc, condition, index) => {
  if (condition.is === '>=') {
    return index === 0 ? this.datapoints[condition.column].gte(condition.to) : acc.and(this.datapoints[condition.column].gte(condition.to));
  } else if (condition.is === '<=') {
    return index === 0 ? this.datapoints[condition.column].lte(condition.to) : acc.and(this.datapoints[condition.column].lte(condition.to));
  } else if (condition.is === '==') {
    return index === 0 ? this.datapoints[condition.column].eq(condition.to) : acc.and(this.datapoints[condition.column].eq(condition.to));
  }
}, null);

const filtered = this.datapoints.query(finalQuery);

Xloka avatar Mar 17 '24 02:03 Xloka