| Aggregation |
[count][tusk.primitives.Count] |
count |
✅ |
test_values_match_featuretools |
|
| Aggregation |
[max][tusk.primitives.Max] |
max |
✅ |
test_values_match_featuretools |
|
| Aggregation |
[mean][tusk.primitives.Mean] |
mean |
✅ |
test_values_match_featuretools |
|
| Aggregation |
[median][tusk.primitives.Median] |
median |
✅ |
test_median_matches_featuretools_on_every_parent_row |
|
| Aggregation |
[min][tusk.primitives.Min] |
min |
✅ |
test_values_match_featuretools |
|
| Aggregation |
[n_unique][tusk.primitives.NUnique] |
num_unique |
⚠️ |
test_n_unique_of_an_empty_group_diverges_from_featuretools |
An empty group is 0 in tusk and NaN in featuretools; null handling agrees. |
| Aggregation |
[percent_true][tusk.primitives.PercentTrue] |
percent_true |
✅ |
test_percent_true_matches_featuretools_on_every_parent_row |
|
| Aggregation |
[quantiles][tusk.primitives.Quantiles] |
— |
➕ |
test_quantiles_defaults_to_the_quartiles |
featuretools has no quantiles counterpart. |
| Aggregation |
[std][tusk.primitives.Std] |
std |
✅ |
test_stacked_values_match_featuretools |
|
| Aggregation |
[sum][tusk.primitives.Sum] |
sum |
✅ |
test_values_match_featuretools |
|
| Aggregation |
— |
all |
❌ |
|
|
| Aggregation |
— |
any |
❌ |
|
|
| Aggregation |
— |
average_count_per_unique |
❌ |
|
|
| Aggregation |
— |
avg_time_between |
❌ |
|
|
| Aggregation |
— |
count_above_mean |
❌ |
|
|
| Aggregation |
— |
count_below_mean |
❌ |
|
|
| Aggregation |
— |
count_greater_than |
❌ |
|
|
| Aggregation |
— |
count_inside_nth_std |
❌ |
|
|
| Aggregation |
— |
count_inside_range |
❌ |
|
|
| Aggregation |
— |
count_less_than |
❌ |
|
|
| Aggregation |
— |
count_outside_nth_std |
❌ |
|
|
| Aggregation |
— |
count_outside_range |
❌ |
|
|
| Aggregation |
— |
date_first_event |
❌ |
|
|
| Aggregation |
— |
entropy |
❌ |
|
Needs per-group value counts. |
| Aggregation |
— |
first |
❌ |
|
|
| Aggregation |
— |
first_last_time_delta |
❌ |
|
|
| Aggregation |
— |
has_no_duplicates |
❌ |
|
|
| Aggregation |
— |
is_monotonically_decreasing |
❌ |
|
Needs an ordered pairwise scan. |
| Aggregation |
— |
is_monotonically_increasing |
❌ |
|
Needs an ordered pairwise scan. |
| Aggregation |
— |
is_unique |
❌ |
|
|
| Aggregation |
— |
kurtosis |
❌ |
|
|
| Aggregation |
— |
last |
❌ |
|
|
| Aggregation |
— |
max_consecutive_false |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
max_consecutive_negatives |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
max_consecutive_positives |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
max_consecutive_true |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
max_consecutive_zeros |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
max_count |
❌ |
|
Needs per-group value counts. |
| Aggregation |
— |
max_min_delta |
❌ |
|
|
| Aggregation |
— |
median_count |
❌ |
|
Needs per-group value counts. |
| Aggregation |
— |
min_count |
❌ |
|
Needs per-group value counts. |
| Aggregation |
— |
mode |
❌ |
|
Length-changing inside a lazy group_by().agg(). |
| Aggregation |
— |
n_most_common |
❌ |
|
Length-changing inside a lazy group_by().agg(). |
| Aggregation |
— |
n_most_common_frequency |
❌ |
|
Length-changing inside a lazy group_by().agg(). |
| Aggregation |
— |
n_unique_days |
❌ |
|
|
| Aggregation |
— |
n_unique_days_of_calendar_year |
❌ |
|
|
| Aggregation |
— |
n_unique_days_of_month |
❌ |
|
|
| Aggregation |
— |
n_unique_months |
❌ |
|
|
| Aggregation |
— |
n_unique_weeks |
❌ |
|
|
| Aggregation |
— |
num_consecutive_greater_mean |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
num_consecutive_less_mean |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
num_false_since_last_true |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
num_peaks |
❌ |
|
Needs a windowed scan. |
| Aggregation |
— |
num_true |
❌ |
|
|
| Aggregation |
— |
num_true_since_last_false |
❌ |
|
Needs a run-length scan. |
| Aggregation |
— |
num_zero_crossings |
❌ |
|
Needs a windowed scan. |
| Aggregation |
— |
percent_unique |
❌ |
|
|
| Aggregation |
— |
skew |
❌ |
|
|
| Aggregation |
— |
time_since_first |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
time_since_last |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
time_since_last_false |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
time_since_last_max |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
time_since_last_min |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
time_since_last_true |
❌ |
|
Needs a reference clock. |
| Aggregation |
— |
trend |
❌ |
|
Needs a least-squares fit. |
| Binary transform |
[add_numeric][tusk.primitives.AddNumeric] |
add_numeric |
❓ |
|
|
| Binary transform |
[divide_numeric][tusk.primitives.DivideNumeric] |
divide_numeric |
❓ |
|
|
| Binary transform |
[multiply_numeric][tusk.primitives.MultiplyNumeric] |
multiply_numeric |
❓ |
|
|
| Binary transform |
[subtract_numeric][tusk.primitives.SubtractNumeric] |
subtract_numeric |
❓ |
|
|
| Binary transform |
— |
add_numeric_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
divide_by_feature |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
divide_numeric_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
equal |
❌ |
|
|
| Binary transform |
— |
equal_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
greater_than |
❌ |
|
|
| Binary transform |
— |
greater_than_equal_to |
❌ |
|
|
| Binary transform |
— |
greater_than_equal_to_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
greater_than_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
less_than |
❌ |
|
|
| Binary transform |
— |
less_than_equal_to |
❌ |
|
|
| Binary transform |
— |
less_than_equal_to_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
less_than_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
modulo_by_feature |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
modulo_numeric |
❌ |
|
|
| Binary transform |
— |
modulo_numeric_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
multiply_boolean |
❌ |
|
|
| Binary transform |
— |
multiply_numeric_boolean |
❌ |
|
|
| Binary transform |
— |
multiply_numeric_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
not_equal |
❌ |
|
|
| Binary transform |
— |
not_equal_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
scalar_subtract_numeric_feature |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Binary transform |
— |
subtract_numeric_scalar |
❌ |
|
Scalar argument; tusk primitives take columns only. |
| Boolean transform |
— |
and |
❌ |
|
|
| Boolean transform |
— |
isin |
❌ |
|
|
| Boolean transform |
— |
not |
❌ |
|
|
| Boolean transform |
— |
or |
❌ |
|
|
| Cumulative transform |
[cum_count][tusk.primitives.CumCount] |
cum_count |
❌ |
|
featuretools counts every row; tusk counts only non-null values. |
| Cumulative transform |
[cum_max][tusk.primitives.CumMax] |
cum_max |
❓ |
|
|
| Cumulative transform |
[cum_min][tusk.primitives.CumMin] |
cum_min |
❓ |
|
|
| Cumulative transform |
[cum_sum][tusk.primitives.CumSum] |
cum_sum |
❓ |
|
|
| Cumulative transform |
[diff][tusk.primitives.Diff] |
diff |
❓ |
|
|
| Cumulative transform |
[time_since_previous][tusk.primitives.TimeSincePrevious] |
time_since_previous |
⚠️ |
test_time_since_previous_is_a_timedelta |
Returns a Duration; featuretools returns float seconds. |
| Cumulative transform |
— |
cum_mean |
❌ |
|
|
| Cumulative transform |
— |
cumulative_time_since_last_false |
❌ |
|
Needs a conditional forward-fill; narwhals has none. |
| Cumulative transform |
— |
cumulative_time_since_last_true |
❌ |
|
Needs a conditional forward-fill; narwhals has none. |
| Cumulative transform |
— |
diff_datetime |
❌ |
|
|
| Datetime transform |
[day][tusk.primitives.Day] |
day |
❓ |
|
|
| Datetime transform |
[hour][tusk.primitives.Hour] |
hour |
❓ |
|
|
| Datetime transform |
[is_weekend][tusk.primitives.IsWeekend] |
is_weekend |
❌ |
|
Agrees on real dates; a null datetime is null in tusk and False in featuretools. |
| Datetime transform |
[month][tusk.primitives.Month] |
month |
❓ |
|
|
| Datetime transform |
[time_since][tusk.primitives.TimeSince] |
time_since |
⚠️ |
test_time_since_matches_featuretools_on_every_row |
Returns a Duration; featuretools returns float seconds. |
| Datetime transform |
[weekday][tusk.primitives.Weekday] |
weekday |
⚠️ |
test_row_wise_transforms |
tusk is ISO 1-7 (Monday = 1); featuretools is 0-6 (Monday = 0). |
| Datetime transform |
[year][tusk.primitives.Year] |
year |
❓ |
|
|
| Datetime transform |
— |
age |
❌ |
|
Needs a reference clock. |
| Datetime transform |
— |
date_to_holiday |
❌ |
|
Needs the holidays package. |
| Datetime transform |
— |
date_to_time_zone |
❌ |
|
|
| Datetime transform |
— |
day_of_year |
❌ |
|
|
| Datetime transform |
— |
days_in_month |
❌ |
|
|
| Datetime transform |
— |
distance_to_holiday |
❌ |
|
Needs the holidays package. |
| Datetime transform |
— |
is_federal_holiday |
❌ |
|
Needs the holidays package. |
| Datetime transform |
— |
is_first_week_of_month |
❌ |
|
|
| Datetime transform |
— |
is_leap_year |
❌ |
|
|
| Datetime transform |
— |
is_lunch_time |
❌ |
|
|
| Datetime transform |
— |
is_month_end |
❌ |
|
|
| Datetime transform |
— |
is_month_start |
❌ |
|
|
| Datetime transform |
— |
is_quarter_end |
❌ |
|
|
| Datetime transform |
— |
is_quarter_start |
❌ |
|
|
| Datetime transform |
— |
is_working_hours |
❌ |
|
|
| Datetime transform |
— |
is_year_end |
❌ |
|
|
| Datetime transform |
— |
is_year_start |
❌ |
|
|
| Datetime transform |
— |
minute |
❌ |
|
|
| Datetime transform |
— |
nth_week_of_month |
❌ |
|
narwhals exposes no ISO week number. |
| Datetime transform |
— |
part_of_day |
❌ |
|
|
| Datetime transform |
— |
quarter |
❌ |
|
|
| Datetime transform |
— |
season |
❌ |
|
|
| Datetime transform |
— |
second |
❌ |
|
|
| Datetime transform |
— |
week |
❌ |
|
narwhals exposes no ISO week number. |
| Email and URL transform |
— |
email_address_to_domain |
❌ |
|
|
| Email and URL transform |
— |
is_free_email_domain |
❌ |
|
Needs a bundled domain list. |
| Email and URL transform |
— |
url_to_domain |
❌ |
|
Needs URL parsing. |
| Email and URL transform |
— |
url_to_protocol |
❌ |
|
Needs URL parsing. |
| Email and URL transform |
— |
url_to_tld |
❌ |
|
Needs URL parsing. |
| Exponential transform |
— |
exponential_weighted_average |
❌ |
|
|
| Exponential transform |
— |
exponential_weighted_std |
❌ |
|
narwhals exposes only ewm_mean. |
| Exponential transform |
— |
exponential_weighted_variance |
❌ |
|
narwhals exposes only ewm_mean. |
| General transform |
[absolute][tusk.primitives.Absolute] |
absolute |
❓ |
|
|
| General transform |
[natural_log][tusk.primitives.NaturalLog] |
natural_logarithm |
❓ |
|
|
| General transform |
— |
absolute_diff |
❌ |
|
|
| General transform |
— |
cosine |
❌ |
|
|
| General transform |
— |
is_null |
❌ |
|
|
| General transform |
— |
negate |
❌ |
|
|
| General transform |
— |
percent_change |
❌ |
|
|
| General transform |
— |
percentile |
❌ |
|
|
| General transform |
— |
rate_of_change |
❌ |
|
|
| General transform |
— |
same_as_previous |
❌ |
|
|
| General transform |
— |
savgol_filter |
❌ |
|
Needs SciPy. |
| General transform |
— |
sine |
❌ |
|
|
| General transform |
— |
square_root |
❌ |
|
|
| General transform |
— |
tangent |
❌ |
|
narwhals exposes no tan. |
| General transform |
— |
variance |
❌ |
|
|
| Location transform |
— |
cityblock_distance |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Location transform |
— |
geomidpoint |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Location transform |
— |
haversine |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Location transform |
— |
is_in_geobox |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Location transform |
— |
latitude |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Location transform |
— |
longitude |
❌ |
|
featuretools' LatLong column has no narwhals equivalent. |
| Natural-language transform |
— |
count_string |
❌ |
|
|
| Natural-language transform |
— |
file_extension |
❌ |
|
|
| Natural-language transform |
— |
full_name_to_first_name |
❌ |
|
Needs name parsing. |
| Natural-language transform |
— |
full_name_to_last_name |
❌ |
|
Needs name parsing. |
| Natural-language transform |
— |
full_name_to_title |
❌ |
|
Needs name parsing. |
| Natural-language transform |
— |
mean_characters_per_word |
❌ |
|
|
| Natural-language transform |
— |
median_word_length |
❌ |
|
Needs a per-row list reduction. |
| Natural-language transform |
— |
num_characters |
❌ |
|
|
| Natural-language transform |
— |
num_unique_separators |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
num_words |
❌ |
|
|
| Natural-language transform |
— |
number_of_common_words |
❌ |
|
Needs tokenisation against a word list. |
| Natural-language transform |
— |
number_of_hashtags |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
number_of_mentions |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
number_of_unique_words |
❌ |
|
Needs a per-row list reduction. |
| Natural-language transform |
— |
number_of_words_in_quotes |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
punctuation_count |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
title_word_count |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
total_word_length |
❌ |
|
|
| Natural-language transform |
— |
upper_case_count |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
upper_case_word_count |
❌ |
|
Needs a regex count; narwhals has none. |
| Natural-language transform |
— |
whitespace_count |
❌ |
|
Needs a regex count; narwhals has none. |
| Postal-code transform |
— |
one_digit_postal_code |
❌ |
|
|
| Postal-code transform |
— |
two_digit_postal_code |
❌ |
|
|