В кадре данных с 12 столбцами и 4 миллионами строк мне нужно добавить столбец, который получит максимальное количество последовательных столбцов со значениями выше нуля для каждой строки.
Вот пример
Из-за размера кадра данных производительность является обязательным условием для решения.
Я пытался замаскировать данные с помощью логических значений и выполнить накопительную сумму, чтобы идентифицировать каждую группу последовательных столбцов со значениями == 0 или != 0
Теперь у меня проблема: я не знаю, как фильтровать только последовательные столбцы со значениями!= 0.
Но давайте считать, что этот метод сработал, и теперь у нас есть количество последовательных столбцов со значениями !=0 для первой строки. Единственное решение, которое я смог разработать для получения результатов для других строк, — это итерация каждой из них. Примерно так:
df['MAX_CONSECUTIVE_COL'] = 0
for n in range(0,df.shape[0]-1):
df.loc[df.index[n], 'MAX_CONSECUTIVE_COL'] = pd.DataFrame(((df>0) != df>0).shift(axis=1)).cumsum(axis=1).iloc[n].value_counts()).sort_values('count',ascending=False).iloc[0,0]
Но помните, что у нас 4 миллиона строк, поэтому выполнение этой итерации займет оооочень много времени, и это вторая проблема, с которой я столкнулся.
В кадре данных с 12 столбцами и 4 миллионами строк мне нужно добавить столбец, который получит максимальное количество последовательных столбцов со значениями выше нуля для каждой строки. Вот пример [code]df = pd.DataFrame(np.array([[284.77, 234.37, 243.8, 84.36, 0., 0., 0., 55.04, 228.2, 181.97, 0., 0.], [13.78, 0., 38.58, 33.16, 0., 38.04, 74.02, 45.74, 27.2, 9.19, 0., 0.], [88.66, 255.72, 323.19, 7.24, 0., 73.38, 45.73, 0., 0., 77.39, 26.57, 279.34], [0., 0., 34.42, 9.16, 0., 43.4, 42.17, 123.69, 60.5, 25.47, 72.32, 7.29], [320.6, 1445.56, 856.23, 371.21, 0., 244.22, 134.58, 631.59, 561.82, 1172.44, 895.68, 186.28], [0., 0., 32.29, 1000.91, 0., 680., 585.46, 466.6, 0., 493.48, 157.1, 125.31]]), columns=[1,2,3,4,5,6,7,8,9,10,11,12]) [/code] А вот пример моей цели: [code]df['MAX_CONSECUTIVE_COL'] = pd.Series([4,5,4,7,7,3]) [/code] Из-за размера кадра данных производительность является обязательным условием для решения. Я пытался замаскировать данные с помощью логических значений и выполнить накопительную сумму, чтобы идентифицировать каждую группу последовательных столбцов со значениями == 0 или != 0 [code]((df\>0) != (df\>0).shift(axis=1)).cumsum(axis=1) [/code] Затем у меня есть результаты одной строки [code]((df>0) != (df>0).shift(axis=1)).cumsum(axis=1).iloc[0] [/code] применил значение value_counts и преобразовал результат в фрейм данных, [code]pd.DataFrame(((df>0) != (df>0).shift(axis=1)).cumsum(axis=1).iloc[0].value_counts()) [/code] применил sort_values, [code]pd.DataFrame(((df>0) != (df>0).shift(axis=1)).cumsum(axis=1).iloc[0].value_counts()).sort_values('count', ascending=False) [/code] и, наконец, получил первое значение (максимальное количество последовательных столбцов со значениями !=0 или == 0): [code]pd.DataFrame(((df>0) != (df>0).shift(axis=1)).cumsum(axis=1).iloc[0].value_counts()).sort_values('count', ascending=False).iloc[0,0] [/code] Теперь у меня проблема: я не знаю, как фильтровать только последовательные столбцы со значениями!= 0. Но давайте считать, что этот метод сработал, и теперь у нас есть количество последовательных столбцов со значениями !=0 для первой строки. Единственное решение, которое я смог разработать для получения результатов для других строк, — это итерация каждой из них. Примерно так: [code]df['MAX_CONSECUTIVE_COL'] = 0
for n in range(0,df.shape[0]-1): df.loc[df.index[n], 'MAX_CONSECUTIVE_COL'] = pd.DataFrame(((df>0) != df>0).shift(axis=1)).cumsum(axis=1).iloc[n].value_counts()).sort_values('count',ascending=False).iloc[0,0] [/code] Но помните, что у нас 4 миллиона строк, поэтому выполнение этой итерации займет оооочень много времени, и это вторая проблема, с которой я столкнулся.
В кадре данных с 12 столбцами и 4 миллионами строк мне нужно добавить столбец, который получит максимальное количество последовательных столбцов со значениями выше нуля для каждой строки.
Вот пример
df = pd.DataFrame(np.array([ ,
,
,
,
,
]),...
Это возвращение к вопросу «Добавить столбцы в кадр данных pandas, содержащий максимальное количество каждой строки И соответствующее имя столбца, где решение было предоставлено с использованием ныне устаревшего метода ix». Как можно сделать то же...
Я новичок в Python и пробую Turtle с помощью руководств. Этот вопрос оказался многословным, моя вина.
Я разработал 2 игры, обрабатываемые 2 функциями (в отдельном модуле), которые вызываются из MAIN:
F1: играет в игру «Зарисовка эскиза», в которой...