1

Тема: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Маю масив з кількох колонок.
Як мені  колонку [p_mw]  помножити на скалярну величину , наприклад на k=2

Ось розписав масив  з колонкою [p_mw]. 

net = pandapower.networks.case33bw() #create an empty network
print('015 ')
print('type(net.load)=')
print(type(net.load))
print('list(net.load)=')
print(list(net.load))
print('type(net.load.columns)=')
print(type(net.load.columns))
print('list(net.load.columns)=')
print(type(net.load.columns))
print('0023 ')

Ось результати з типами масивів

type(net.load)=
<class 'pandas.core.frame.DataFrame'>
list(net.load)=
['bus', 'const_i_percent', 'const_z_percent', 'controllable', 'in_service', 'name', 'p_mw', 'q_mvar', 'scaling', 'sn_mva', 'type']
type(net.load.columns)=
<class 'pandas.core.indexes.base.Index'>
list(net.load.columns)=
<class 'pandas.core.indexes.base.Index'>

2 Востаннє редагувалося koala (07.05.2020 14:38:18)

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Як я розумію, десь так:

print(net.load['p_mw'].apply(lambda x:x*2))

Тільки це створить новий стовпчик, а не помножить той, що вже в таблиці. Щоб змінити в таблиці - щось таке:

net.load['p_mw'] = net.load['p_mw'].apply(lambda x:x*2)

Лямбду можна спростити до 2 .__mul__, але загалом зручніше саме лямбда.

net.load['p_mw'].apply(2 .__mul__)
Подякували: leofun011

3

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

якщо говорити про чистий пандас, то не бачу чому б не зробити так:

import pandas as pd

CONST = 2
df = pd.DataFrame({'A': [1,2,3], 'B': [5,6,7]})
df.index.name = 'index'
print('before')
display(df)

df['A'] *= CONST
print('after')
display(df)

before
indexA    B
0    1    5
1    2    6
2    3    7

after
indexA    B
0    2    5
1    4    6
2    6    7

4

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

якщо ж нам з якихось причин треба застосувати складну логіку і задіяти lambda, то для однієї колонки краще використати map

CONST = 4
df = pd.DataFrame({'A': [1,2,3], 'B': [5,6,7]})
df.index.name = 'index'
print('before map')
display(df)

df['A'] = df['A'].map(lambda x: x * CONST)
print('after map')
display(df)

before map
indexA    B
0    1    5
1    2    6
2    3    7

after map
indexA    B   
0    4    5
1    8    6
2    12    7

Подякували: koala, leofun012

5

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

а чи працюватиме це все так само в pandapower - треба перевірити

6

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Дякую за увагу.
Поки не працює.

Повторю .
1. Мені треба змінити дані саме в net.load, не в нових сформованих стовчиках  dataFrame.
2.  pandapower net.load має тип масива
    type(net.load)=
    <class 'pandas.core.frame.DataFrame'>

Зробив по koala
net.load['p_mw'].apply(lambda x:x*10)

Далі перевіряю що змінилося  в net.load :

net.load_column_new=pd.DataFrame(net.load, columns=['p_mw'])
print(net.load_column_new)

Не перемножив. Масив не змінився. І помилка не вискакює.

Може pandapower не дозволяє?

7

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Ще раз: і apply, і map не змінюють, а створюють новий стовпчик.

net.load_column_new = net.load['p_mw'].apply(lambda x:x*2)
print(net.load_column_new)

8

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Тобто не можливо редагувати стовчик в масиві? Вічні масиви? На усі часи? Цікаво.

Не знімаючи питання про редагування масиву є ще окрема проблема, яке я не ставлю перед експертами. Як ping чудово зауважив - ще треба подивитися з pandapower. І здається саме так. 
Здається, є обмежання на редагування стандартних схем.

9 Востаннє редагувалося koala (07.05.2020 18:42:09)

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Добре, встановив pandapower. У мене все працює саме так, як я написав. І зміни теж.

10

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Спасибі за участь.
Не вийшло використати вашу пропозицію. Чомусь не змінюєтьс яколонка колонка.

Я теж вирішив проблему.Яле шлях по серпантину.
Я забиваю потрібні рядки  новими параметрами. Треба використовувати pandapower.
pandapower.create_load(net, bus=2, p_mw=100., q_mvar=0.2)

11

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

А після

net.load['p_mw'] = net.load['p_mw'].apply(lambda x:x*2)

що відбувається?

12 Востаннє редагувалося ping (07.05.2020 19:49:01)

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

koala написав:

А після

net.load['p_mw'] = net.load['p_mw'].apply(lambda x:x*2)

що відбувається?

думаю те, що і повинно відбуватися - метод apply  повертає модифікований стовпчик, який присвоюється стовпчику з тим самим column_name
на жаль - це відбувається не векторно і при великих наборах даних гальмує
map краще, але не рішає питання остаточно. тим більше, що деколи треба використовувати кілька стовпців.


прохання, якщо pandapower щще стоїть -

net.load['p_mw'] *= 2

працює?

Подякували: leofun011

13

Re: Як перемнжити колонку на скаляр ((net.load, columns=['p_mw'])

Так, це працює.

Подякували: ping1