Как проверить, соответствует ли имя строки в dataframe имени столбца

1

Я хочу выполнить цикл данных, проверяя, совпадает ли имя строки с именем столбца. Если они совпадают, я хочу установить значение для пересечения равным нулю. Я пробовал несколько вариантов, но никто из них не работает. Вот псевдокод, который показывает, что я хочу сделать:

for row in dataframe:
    if row_name == column_name:
        dataframe[rowname][columnname] = 0

Вот как выглядят данные:

        NAME1    NAME2    NAME3
NAME1    1       .9         .2
NAME2    .6      1          .7
NAME3    .5      .8         1
Теги:
pandas

2 ответа

1
Лучший ответ

Вы можете рассчитать пересечение вашего индекса и столбцов. Затем pd.DataFrame.loc пересечение и используйте pd.DataFrame.loc для установки значений.

intersection = df.index & df.columns

for item in intersection:
    df.loc[item, item] = 0

print(df)

       NAME1  NAME2  NAME3
NAME1    0.0    0.9    0.2
NAME2    0.6    0.0    0.7
NAME3    0.5    0.8    0.0
  • 1
    Вау, это было быстро Я приму, как только смогу. Спасибо!
0

Более запутанный метод, чем @jpp's, вы можете stack df, чтобы имена столбцов составляли второй уровень индекса:

In[296]:
stack = df.stack()
stack

Out[296]: 
NAME1  NAME1    1.0
       NAME2    0.9
       NAME3    0.2
NAME2  NAME1    0.6
       NAME2    1.0
       NAME3    0.7
NAME3  NAME1    0.5
       NAME2    0.8
       NAME3    1.0
dtype: float64

Затем мы можем скрыть сложный df и установить значение 0 где значения уровня индекса совпадают:

In[297]:
stack.loc[stack.index.get_level_values(0) == stack.index.get_level_values(1)] = 0
stack

Out[297]: 
NAME1  NAME1    0.0
       NAME2    0.9
       NAME3    0.2
NAME2  NAME1    0.6
       NAME2    0.0
       NAME3    0.7
NAME3  NAME1    0.5
       NAME2    0.8
       NAME3    0.0
dtype: float64

Затем мы вызываем unstack чтобы вернуться к исходному df:

In[298]:
stack.unstack()

Out[298]: 
       NAME1  NAME2  NAME3
NAME1    0.0    0.9    0.2
NAME2    0.6    0.0    0.7
NAME3    0.5    0.8    0.0

Это приводит к увеличению производительности на маленьком df при создании временного df из вызовов stack и unstack но если у вас большие перекрытия значений индекса и столбца, тогда он избегает looping

  • 0
    Спасибо ... Я проверю это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню