Вам не хватает инструкции цикла (Next i
). Кроме того, вам не нужно использовать Replace
, поскольку вы уже подтвердили значение в своей ячейке с помощью оператора If
.
Если ваше значение равно From
, вы можете просто изменить его на To
непосредственно (& amp; наоборот)
Кроме того, это хорошая практика чтобы квалифицировать ваше использование объекта Cells
.
Option Explicit
Sub To_From()
Dim ws As Worksheet, i as Long
Set ws = ThisWorkbook.Sheets("Template_Test")
For i = 2 To ws.Range("E" & ws.Rows.Count).End(xlUp).Row
If ws.Cells(i, 5) = "From" Then
ws.Cells(i, 5) = "To"
ElseIF ws.Cells(i, 5) = "To" Then
ws.Cells(i, 5) = "From"
End If
Next i
End Sub
Избегайте делать это по строкам, сохраняя одно из ваших значений с временным значением (смените From
на FromTemp
), чтобы избежать помех вашему другому свопу.
Я предполагаю, что это вмешательство - единственная причина, по которой вы заявили, что это должно было быть по строкам в первую очередь. Чем больше ваш набор данных, тем более привлекательным этот параметр станет при рассмотрении скорости.
Option Explicit
Sub To_From()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Template_Test")
Dim ReplaceRange As Range
Set ReplaceRange = ws.Range("E1:E" & ws.Range("E" & ws.Rows.Count).End(xlUp).Row)
ReplaceRange.Replace "From", "FromTemp", xlWhole
ReplaceRange.Replace "To", "From", xlWhole
ReplaceRange.Replace "FromTemp", "To", xlWhole
End Sub
Я знаю, что W-B уже ответил на это очень элегантно.
Однако, поскольку я потратил время на решение этой проблемы менее профессионально, позвольте мне также опубликовать свое решение.
От:
Я ищу способ вычислить следующее: С помощью индекса df я могу посмотреть в столбце A2 для df2 значение B2, которое должно быть добавлено в df.
blockquote>Я понял, что должен сделать:
- получить форму списка индексов df. Итак, А, В, С ...
- посмотрите значения в df2 ['B2'] в том же индексе, что и df2 ['A2'] для каждого элемента индекса df
- , создайте новый столбец ['B2'] в df, куда мы копируем эти значения из df2 ['B2'], совпадающие с индексом из df для элементов в df2 ['A2']
Это мой код:
import pandas as pd d = {'A': [1, 1, 0, 1, 0, 1, 0], 'B': [0, 0, 0, 0, 0, 1, 1] } df = pd.DataFrame(data=d, index=["A", "B", "C", "D", "E", "F", "G"]) print(df) d = {'A2': ["D", "A", "A", "B", "C", "C", "E", "X", "F", "G"], 'B2': ["DD", "AA", "AA", "BB", "CC", "CC", "EE", "XX", "FF", "GG"], 'C3': [1, 1, 11, 35, 53, 2, 76, 45, 5, 34]} df2 = pd.DataFrame(data=d) print(df2) llista=[] for i in df.index: m=df2['A2'].loc[df2['A2']==i].index if m[0]: print m[0],i llista.append(df2['B2'].iloc[m[0]]) else: llista.append([]) df['B2'] = llista
Вывод:
A B B2 A 1 0 AA B 1 0 BB C 0 0 CC D 1 0 [] E 0 0 EE F 1 1 FF G 0 1 GG
Как видите, отличается от принятого поста. Это потому, что в df2 нет индекса 'D' ['A2']
set_index
и назначить его
df['B2']=df2.drop_duplicates('A2').set_index('A2')['B2']
df
Out[728]:
A B B2
A 1 0 AA
B 1 0 BB
C 0 0 CC
D 1 0 DD
E 0 0 EE
F 1 1 FF
G 0 1 GG