Использование Panda, чтобы пропустить следующие три строки из определенного столбца - PullRequest
0 голосов
/ 23 мая 2018

Я работал над этим кодом навсегда: я хотел бы выполнить следующее -Если Pout> 3, затем удалить / удалить следующие 3 строки

df=pd.read_csv(file,sep=',',usecols=['Iin', 'Iout','Pout'])
print(df['Pout'])
for i in df['Pout']:
   if i>3:
      df.drop(df[3:])# drop/delete the next 3 rows regardless of the value
 print(df)

Любая помощь будет высоко ценится

Спасибо

Я придумал этот код на основе вашего первого кода.но обновленная версия, которую вы только что опубликовали, более эффективна.Теперь я отбрасываю следующие пять строк после того, как условия были выполнены.

import pandas as pd
df = pd.DataFrame({'a': [1,5.0,1,2.3,2.1,2,1,3,4,7], 'b': 
[1,4,0.2,4.5,8.2,1,2,3,4,7], 'c': [1,4.5,5.4,6,2,4,2,3,4,7]})
for index in range(len(df['c'])):
  if df['c'][index] >3:
    df.at[index+1, 'c'] = None
    df.at[index+2, 'c'] = None
    df.at[index+3, 'c'] = None 
    df.at[index+4, 'c'] = None
    df.at[index+5, 'c'] = None
    print(df['c'])
    break

1 Ответ

0 голосов
/ 23 мая 2018

попробуйте это:

import pandas as pd
df = pd.DataFrame({'a': [1,5,1,2,2,2,1], 'b': [1,4,2,4,8,1,2], 'c': [1,2,6,6,2,1,2]})
for i in df['c']:
   if i>3:
      try:
         idx = df['c'].tolist().index(i)# drop/delete the next 3 rows regardless of the value
         print(idx)
      except:
         pass
      for i in range(idx, idx+3):
         df.at[i, 'c'] = None
print(df)

Вывод:

   a  b  c
0  1  1  1.0
1  5  4  2.0
2  1  2  NaN
3  2  4  NaN
4  2  8  NaN
5  2  1  1.0
6  1  2  2.0

Мое решение с использованием фиктивного фрейма данных

Я получил индекс элемента, если элементбольше 3, затем выполнить итерацию по всему диапазону индекса элементов до индекса элементов плюс 3, затем выполните функцию at, чтобы установить значение Nan

В моем редактировании я только что добавил попытку, кроме и теперьэто работает

Для 5 строк:

Я думаю, что этот код - то, что вы хотите, я также думаю, что это более эффективно

import pandas as pd
df = pd.DataFrame({'a': [1,5.0,1,2.3,2.1,2,1,3,4,7], 'b': 
[1,4,0.2,4.5,8.2,1,2,3,4,7], 'c': [1,4.5,5.4,6,2,4,2,3,4,7]})
for index in range(len(df['c'])):
  if df['c'][index] >3:
     for i in range(index+1, index+6):
         df.at[i, 'c'] = None
     print(df['c'])
     break

Вывод:

0    1.0
1    4.5
2    NaN
3    NaN
4    NaN
5    NaN
6    NaN
7    3.0
8    4.0
9    7.0
Name: c, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...