Anonymous
Эффективно конвертировать точки панды с фильтром в поляры
Сообщение
Anonymous » 20 окт 2024, 03:09
Как эффективно преобразовать приведенный ниже код pandas в поляры. Приведенный ниже df представляет собой образец df. Исходный df намного больше по размеру и содержит более 5 миллионов строк данных. Я создал сводный df из полярных данных, но не знал, как его фильтровать, чтобы получить нужные данные, как показано в pandas df_final df.
Код: Выделить всё
import polars as pl
import pandas as pd
df = pd.DataFrame({
'col1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
'col2': ['test1', 'test1', 'test1', 'test1', 'test2', 'test2', 'test2',
'test2', 'test3', 'test3', 'test3', 'test3', 'test4', 'test5',
'test1', 'test1', 'test1', 'test3', 'test4'],
'col3': ['t1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1',
't1', 't1', 't1', 't1', 't1','tl','tl','tl'],
'col4': ['input1', 'input2', 'input3', 'input4', 'input1', 'input2',
'input3', 'input4', 'input1', 'input2', 'input3', 'input5',
'input2', 'input6', 'input1', 'input1', 'input2', 'input2',
'input2'],
'col5': ['result1', 'result2', 'result3', 'result4', 'result1', 'result2',
'result3', 'result4', 'result1', 'result2', 'result3', 'result4',
'result2', 'result1', 'result2', 'result6', 'result1', 'result1', 'result1'],
'col6': [10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 50, 20, 100, 10, 10, 20, 20, 20],
'col7': [100.2, 101.2, 102.3, 101.4, 100.0, 103.0, 104.0, 105.0, 102.0,
87.0, 107.0, 110.2, 120.0, 88.0, 106.2, 101.1, 100, 90.2, 110]
})
p_df = df.pivot_table(values='col7', index=['col4', 'col5', 'col6'], columns=['col2'], aggfunc='max')
df_final = p_df[((p_df.groupby(level=0).rank(ascending=False) == 1.).any(axis=1))&(p_df>100).any(axis=1)]
print(df_final)
# Start of polars code
df_p = pl.from_pandas(df)
# Group by columns
p_df = df_p.pivot(on='col2', index=['col4', 'col5', 'col6'], values='col7')
Любой вклад приветствуется. Заранее спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/776 ... fficiently
1729382985
Anonymous
Как эффективно преобразовать приведенный ниже код pandas в поляры. Приведенный ниже df представляет собой образец df. Исходный df намного больше по размеру и содержит более 5 миллионов строк данных. Я создал сводный df из полярных данных, но не знал, как его фильтровать, чтобы получить нужные данные, как показано в pandas df_final df. [code]import polars as pl import pandas as pd df = pd.DataFrame({ 'col1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 'col2': ['test1', 'test1', 'test1', 'test1', 'test2', 'test2', 'test2', 'test2', 'test3', 'test3', 'test3', 'test3', 'test4', 'test5', 'test1', 'test1', 'test1', 'test3', 'test4'], 'col3': ['t1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1', 't1','tl','tl','tl'], 'col4': ['input1', 'input2', 'input3', 'input4', 'input1', 'input2', 'input3', 'input4', 'input1', 'input2', 'input3', 'input5', 'input2', 'input6', 'input1', 'input1', 'input2', 'input2', 'input2'], 'col5': ['result1', 'result2', 'result3', 'result4', 'result1', 'result2', 'result3', 'result4', 'result1', 'result2', 'result3', 'result4', 'result2', 'result1', 'result2', 'result6', 'result1', 'result1', 'result1'], 'col6': [10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 50, 20, 100, 10, 10, 20, 20, 20], 'col7': [100.2, 101.2, 102.3, 101.4, 100.0, 103.0, 104.0, 105.0, 102.0, 87.0, 107.0, 110.2, 120.0, 88.0, 106.2, 101.1, 100, 90.2, 110] }) p_df = df.pivot_table(values='col7', index=['col4', 'col5', 'col6'], columns=['col2'], aggfunc='max') df_final = p_df[((p_df.groupby(level=0).rank(ascending=False) == 1.).any(axis=1))&(p_df>100).any(axis=1)] print(df_final) # Start of polars code df_p = pl.from_pandas(df) # Group by columns p_df = df_p.pivot(on='col2', index=['col4', 'col5', 'col6'], values='col7') [/code] Любой вклад приветствуется. Заранее спасибо. Подробнее здесь: [url]https://stackoverflow.com/questions/77635993/convert-pandas-pivot-with-filter-to-polars-efficiently[/url]