в VBA (Excel), большинство алгоритмов должны быть выполнены в стиле цикла.Например, мы хотим найти все строки, в которых столбец («A») равен «x», а затем добавить к другому столбцу в этой строке значение из строки, в которой столбец («A») равен «y».Как можно подойти к конкретной проблеме, подобной этой в пандах?
В целом: я хотел бы просмотреть каждую строку DataFrame и использовать ее значения в качестве критериев для выбора другой строки (строк) из того же DataFrameи посчитаем значения из этих строк.
В реальном примере:
Sub SomeCode()
Dim vArr As Variant
Dim i As Integer, j As Integer
vArr = Selection
For i = LBound(vArr) + 1 To UBound(vArr)
If vArr(i, 2) = "S1" Then
If vArr(i, 8) >= "2019-13" Then
If vArr(i, 7) = "Chat" Or vArr(i, 7) = "Email" Then
For j = LBound(vArr) + 1 To UBound(vArr)
If vArr(j, 2) = "S1" And vArr(j, 8) = vArr(i, 8) And vArr(j, 6) = vArr(i, 6) Then
If vArr(j, 7) = "Phone" Then
vArr(j, 9) = vArr(j, 9) + vArr(i, 9) * 0.05
ElseIf vArr(j, 7) = "SMS" Then
vArr(j, 9) = vArr(j, 9) + vArr(i, 9) * 0.95
End If
End If
Next j
vArr(i, 9) = 0
End If
End If
End If
Next i
Selection = vArr
End Sub
Набор данных выглядит примерно так:
ID Country Version Partner SOME Location Site Channel Weeknum contacts
1099 UK OP1 0 0 0 0 Email 2019-08 -31
1242 UK OP1 0 0 0 0 Phone 2019-47 -49
1599 UK OP1 0 0 0 1 SMS 2019-40 0
1817 UK OP1 1 1 1 2 SMS 2019-50 0
2539 UK OP1 0 0 0 3 Chat 2019-44 94
3889 UK OP1 0 0 0 4 SMS 2019-42 0
4106 UK OP1 0 0 0 5 SMS 2019-51 -62
4248 UK S1 2 1 2 6 Email 2019-37 0
5895 UK S1 1 1 1 2 Email 2019-20 0
6328 UK S1 0 0 0 7 Email 2019-37 0
6355 UK S1 0 0 0 7 SMS 2019-12 0
6419 UK S1 0 0 0 7 Phone 2019-24 0
6486 UK S1 0 0 0 8 Chat 2019-39 91
6549 UK S1 0 0 0 8 Email 2019-50 98
6568 UK S1 0 0 0 8 SMS 2019-17 0
7587 UK S1 0 0 0 9 Email 2019-48 77
7798 UK S1 3 1 1 10 Email 2019-51 0
8185 UK S1 0 0 0 5 Email 2019-22 70
8827 UK S2 0 0 0 11 Email 2019-40 1
9983 UK S2 0 0 0 1 Phone 2019-52 70
10193 UK S2 1 1 3 12 Chat 2019-02 0
11053 UK S2 0 0 0 13 Chat 2019-30 0
11707 UK S2 0 0 0 9 Email 2019-08 -27
11859 UK S2 3 1 1 10 Chat 2019-04 0
12243 UK S2 0 0 0 4 Phone 2019-24 -77