pandas: ошибка при использовании метода .where()
station_stat_full['group_name'] = station_stat_full['name'].where(big_nets_stat.index.isin(station_stat_full['name']) , 'Другие')
print(station_stat_full)
ValueError: Array conditional must be same shape as self
Когда пытаюсь проверить без метода все работает
station_stat_full
name count time_spent
id
00ca1b70 Вероника 131 166.0
0178ce70 Василёк 164 234.5
01abf4e9 Гацания 30 181.5
030a9067 Колокольчик 228 135.5
03740f2d Василёк 157 289.0
0410bffa Люпин 13 136.0
... ... ... ...
e648b45e Астильба 42 465.5
e66b6d7a Василёк 568 172.5
e6ee10ab Астильба 83 489.0
e7d23afd Подснежник 45 173.0
e80c9f2c Гейхера 124 167.0
[386 rows x 3 columns]
big_nets_stat
time_spent good_time_spent median_time stations
name
Василёк 268.849897 264.0 252.00 103.0
Гейхера 167.445947 204.0 192.00 12.0
Календула 207.357323 254.0 240.00 36.0
Колокольчик 119.131564 161.0 161.00 21.0
Люпин 235.440937 186.0 200.00 13.0
Мальва 136.562234 182.0 177.75 22.0
Немезия 186.535207 226.0 227.50 21.0
Роза 260.877217 315.0 350.00 18.0
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
В сообщении об ошибке написано, что размер булева массива должен совпадать с размером серии. У вас же кол-во элементов big_nets_stat.index
равно 7, а элементов в station_stat_full['name']
- 386. Очевидно, что результатом выражения big_nets_stat.index.isin(station_stat_full['name'])
будет булев массив из 7 элементов, который вы пытаетесь "растянуть" на 386 элементов station_stat_full
.
Вам нужно просто переставить серии в выражении - искать big_nets_stat.index
в station_stat_full['name']
.
station_stat_full = pd.DataFrame({'id': ['00ca1b70', '0178ce70', '01abf4e9', '030a9067', '03740f2d', '0410bffa', 'e648b45e', 'e66b6d7a', 'e6ee10ab', 'e7d23afd', 'e80c9f2c'],
'name': ['Вероника', 'Василёк', 'Гацания', 'Колокольчик', 'Василёк', 'Люпин', 'Астильба', 'Василёк', 'Астильба', 'Подснежник', 'Гейхера'],
'count': [131, 164, 30, 228, 157, 13, 42, 568, 83, 45, 124], 'time_spent': [166.0, 234.5, 181.5, 135.5, 289.0, 136.0, 465.5, 172.5, 489.0, 173.0, 167.0]})
big_nets_stat = pd.DataFrame({'name': ['Василёк', 'Гейхера', 'Календула', 'Колокольчик', 'Люпин', 'Мальва', 'Немезия', 'Роза'],
'time_spent': [268.849897, 167.445947, 207.357323, 119.131564, 235.440937, 136.562234, 186.535207, 260.877217],
'good_time_spent': [264.0, 204.0, 254.0, 161.0, 186.0, 182.0, 226.0, 315.0], 'median_time': [252.0, 192.0, 240.0, 161.0, 200.0, 177.75, 227.5, 350.0],
'stations': [103.0, 12.0, 36.0, 21.0, 13.0, 22.0, 21.0, 18.0]}).set_index('name')
station_stat_full['group_name'] = station_stat_full['name'].where(station_stat_full['name'].isin(big_nets_stat.index), 'Другие')
print(station_stat_full)
id name count time_spent group_name
0 00ca1b70 Вероника 131 166.0 Другие
1 0178ce70 Василёк 164 234.5 Василёк
2 01abf4e9 Гацания 30 181.5 Другие
3 030a9067 Колокольчик 228 135.5 Колокольчик
4 03740f2d Василёк 157 289.0 Василёк
5 0410bffa Люпин 13 136.0 Люпин
6 e648b45e Астильба 42 465.5 Другие
7 e66b6d7a Василёк 568 172.5 Василёк
8 e6ee10ab Астильба 83 489.0 Другие
9 e7d23afd Подснежник 45 173.0 Другие
10 e80c9f2c Гейхера 124 167.0 Гейхера