Повторите все строки фрейма данных и вычислите сумму столбца и остановите итерацию, если сумма столбцов = 1, и выведите строку с количеством итераций

#python #pandas #conditional-statements #iteration #rows

#питон #панды #условные утверждения #итерация #строки

Вопрос:

Я создал фрейм данных с 15 столбцами х 32768 строк. В этом я вычислил сумму 13-го столбца(Di) и получил сумму = 2,1 e-06. Фрейм данных. Вот пример моего фрейма данных

Теперь я хочу перебирать строки до тех пор, пока эта сумма не составит 1, и, наконец, вывести все значения в строке, а также количество итераций.

Например: для 32 768 строк = 2,1 e-06 если, скажем, после 1 миллиона итераций 13-й столбец достигнет 1, я хочу распечатать строку.

Я попробовал этот код, но он повторяется только до 32 768 строк (т. е. 32 768 32 768). и распечатка строк. Но я хочу знать при сумме = 1

 if D_sum[0] lt; 1: #Sum of 13th column # D_sum = 2.1e-06 count = 0 #repeat the experiment (all columns) from 1 to 32767 until D_sum = 1 for row in df.iterrows():  count  = 1  D_sum[0]  = (df[['Di']].sum()).values  print(D_sum)  #print(row)  if D_sum[0] gt; 1 : #(Condition)  print('count', count)  print(D_sum)  print(row)  break  

Фактический объем производства:

 8.13e-06 1.2e-06.. so on up to  . . 0.04 (only 19,041 iterations) #this is iterating only at 32,768 at max and printing D_sum but   

Мне нужно, чтобы итерации продолжались до тех пор, пока D_sum = 1 или близко к 1.

 #('prints all rows')  Expected Output: 8.13e-06 1.2e-06.. so on up to  . . 1 (#1 million iterations approx) ('print row)  

Комментарии:

1. Каков ваш блок «если»в первой строке? Также я заметил, что у вас нет дела для D_sum == 1 (только lt; 1 и gt; 1 ). Поскольку вы работаете с очень маленькими числами, могут возникнуть некоторые проблемы с округлением (например 1 - 1e-17 , округляется до 1).

2. Спасибо вам за ваш комментарий. «Если» в первой строке-это условие, которое я дал, чтобы проверить, является ли D_sum (суммирование всех значений в 13-м столбце Di) lt; 1, затем начинается итерация строк и продолжается до тех пор, пока D_sum gt; 1, затем выведите D_sum, количество строк и итераций. Да, поскольку мои цифры очень малы, даже если они где-то близки к 1, для меня это тоже нормально.

3. Это if ничего не делает, потому что за толстой кишкой что-то не так, и после нее нет отступа.

4. хм, может быть, я должен это проверить. Не могли бы вы, пожалуйста, улучшить мой код, чтобы получить желаемый результат.