Я не смог понять это.
Допустим, у меня есть датафрейм панд (port_info
), который выглядит следующим образом:
chass olt port BW
0 1 1 1 80000
1 1 1 2 212000
2 1 1 3 926600
3 1 1 4 50000
4 1 1 5 170000
5 1 1 6 840000
6 1 1 7 320000
7 1 1 8 500000
8 1 1 9 270000
9 1 1 10 100000
10 1 2 1 420000
11 1 2 2 60000
12 1 2 3 480000
13 1 2 4 90000
14 1 2 5 0
15 1 2 6 520000
16 1 2 7 840000
17 1 2 8 900000
18 1 2 9 110000
19 1 2 10 0
Я хочу добавить столбец в зависимости от того, сколько портов на olt на шасси.
Если на один канал приходится более 8 портов, добавьте значение 1 к каждой строке для этого olt для этого блока.
В противном случае добавьте значение 10 в каждую строку для этого olt для этого chass.
В конце мне нужен новый столбец (port_info.BW_cap
), который имеет значение для каждого порта в зависимости от того, сколько портов есть в этом olt в этом шассе.
Пока у меня есть это, чтобы проверить максимальный порт на olt:
test = pd.DataFrame(table.groupby(['chass','olt'])['port'].max()).reset_index()
Это дает мне минималистский фрейм данных, который выглядит следующим образом:
chass olt
1 1 10
2 10
3 10
4 10
5 10
6 10
7 10
8 10
11 10
12 10
13 10
14 10
15 10
16 10
17 10
18 10
Каков наилучший способ взять все вышеперечисленное и, в основном, заставить панд перебирать каждую строку в исходном кадре данных и сравнивать с соответствующей строкой в минималистском кадре данных, чтобы проверить, какой максимальный порт для этого olt для этого шасси, и добавить значение в строку в исходном фрейме данных в новом столбце с именем 'BW_cap' в зависимости от значения в минималистском фрейме данных для этой же комбинации chass / olt?
Итак, в конце концов, что-то похожее на это:
chass olt port BW BW_cap
0 1 1 1 80000 1
1 1 1 2 212000 1
2 1 1 3 926600 1
3 1 1 4 50000 1
4 1 1 5 170000 1