Настройте все остальные строки фрейма данных - PullRequest
0 голосов
/ 23 мая 2019

Я хотел бы изменить каждую вторую строку моего фрейма данных.

У меня есть df, как это:

 Node  |  Feature | Indicator | Value | Class | Direction
--------------------------------------------------------
1     |  WPS     |     <=    | 0.27  | 4     | 1 -> 2  
--------------------------------------------------------
2     |  ABC     |     <=    | 0.40  | 5     | 1 -> 3
--------------------------------------------------------
3     |  CXC     |     <=    | 0.45  | 2     | 2 -> 4
--------------------------------------------------------
4     |  DFT     |     <=    | 0.56  | 1     | 2 -> 5
--------------------------------------------------------
5     |  KPL     |     <=    | 0.30  | 3     | 3 -> 5
--------------------------------------------------------
6     |  ERT     |     <=    | 0.55  | 5     | 3 -> 1

Хотелось бы следующее:

 Node  |  Feature | Indicator | Value | Class | Direction
--------------------------------------------------------
1     |  WPS     |     <=    | 0.27  | 4     | 1 -> 2  
--------------------------------------------------------
2     |  WPS     |     >     | 0.27  | 5     | 1 -> 3
--------------------------------------------------------
3     |  CXC     |     <=    | 0.45  | 2     | 2 -> 4
--------------------------------------------------------
4     |  CXC     |     >     | 0.45  | 1     | 2 -> 5
--------------------------------------------------------
5     |  KPL     |     <=    | 0.30  | 3     | 3 -> 5
--------------------------------------------------------
6     |  KPL     |     >     | 0.30  | 5     | 3 -> 1

Таким образом, каждая вторая строка меняет «Feature» и «Value» на то же, что и строка выше, а «Indicator» изменяется на «>»

Я не могу понять, как перебирать Dataframe (я полагаю, с помощью iterrows) и изменять только каждую вторую строку?

EDIT:

Я попробовал следующее в соответствии с рекомендациями:

    my_df = pd.DataFrame()
    my_df['N'] = [1, 2, 3, 4, 5, 6]
    my_df['I'] = ['=>', '=>', '=>', '=>', '=>', '=>']
    my_df['F'] = ['a', 'b', 'c', 'd', 'e', 'f']

    my_df.loc[1::2, 'F'] = None
    my_df.loc[1::2, 'I'] = '>'

    my_df.fillna(method='ffill')

    print(my_df)

Выход:

   N   I     F
0  1  =>     a
1  2   >  None
2  3  =>     c
3  4   >  None
4  5  =>     e
5  6   >  None

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Найдите ниже используемую логику

  • Выберите четные строки, используя нарезку.
  • Установите нужные столбцы / поля с помощью Нет для нарезанных строк, которые должны быть заимствованы из предыдущей строки, мы можем заполнить их позже, используя прямую заливку.
  • Затем использовать прямую заливку из последних ненулевых полей для соответствующих столбцов
import pandas as pd
xlsColName = chr(ord('A')+colPosn)       # Get xls column name (not the column header as per data frame). This will be used to set attributes of xls columns
df = pd.read_csv('temp.csv')
df.loc[1::2, 'Feature'] = None           # prepare the field for use with df.fillna
df.loc[1::2, 'Value'] = None
df.loc[1::2, 'Indicator'] = '>'          # update the indicator field
df.fillna(method='ffill', inplace=True)  # This fills the NaN values from existing values 
0 голосов
/ 23 мая 2019

Вы можете попробовать что-то вроде:

df ['Indicator'] = ">" if df ['Node']% 2 == 0 else "<=" </p>

Этоесли столбец «Узел» похож на индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...