Устранение для l oop с помощью pandas - PullRequest
0 голосов
/ 30 марта 2020

У меня есть фрейм данных

ifa_num=[0.1,0.2,0.3,0.4,0.5]
ak_num=[0.6,0.7,0.8,0.9,0.11]
ch_dist=['if','ak','if','if','ak']
df=pd.DataFrame()
df['if_num']=ifa_num
df['ak_num']=ka_num
df['ch_dist']=ch_dist

dataframe_looks_like нажмите здесь, чтобы увидеть

Мне нужно вставить еще один столбец, а именно

  • if_ak: который будет иметь номер из ifa_num, если его ch_dist равен 'if', иначе он возьмет число из ak_num

Результирующий фрейм данных должен выглядеть как

результирующий кадр данных после добавления столбцов if_ak

Я написал наивный код, используя для l oop Я не могу выяснить, как оптимизировать его, так как в данных растет для l oop станет неэффективно.

li=[]    
for x in range(df.shape[0]):
    if df.loc[x,'ch_dist']=='if':
        li.append(df.loc[x,'if_num'])
    else:
        li.append(df.loc[x,'ak_num'])
df['if_ak']=li

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Попробуйте этот код ниже:

ifa_num=[0.1,0.2,0.3,0.4,0.5]
ak_num=[0.6,0.7,0.8,0.9,0.11]
ch_dist=['if','ak','if','if','ak']
df=pd.DataFrame()
df['if_num']=ifa_num
df['ak_num']=ak_num
df['ch_dist']=ch_dist

Вместо для l oop

df.loc[df['ch_dist'] == 'if', 'if_ak'] = df['if_num']
df.loc[df['ch_dist'] != 'if', 'if_ak'] = df['ak_num']
0 голосов
/ 30 марта 2020

Вы можете использовать логическую маску для умножения соответствующего столбца:

import pandas as pd

ifa_num=[0.1,0.2,0.3,0.4,0.5]
ak_num=[0.6,0.7,0.8,0.9,0.11]
ch_dist=['if','ak','if','if','ak']
df=pd.DataFrame({'if_num': ifa_num,
                 'ak_num': ak_num,
                 'ch_dist': ch_dist})

m_if = df['ch_dist'] == 'if'
df['if_ak'] = m_if * df['if_num'] + (1-m_if) * df['ak_num']

df
   if_num  ak_num ch_dist  if_ak
0     0.1    0.60      if   0.10
1     0.2    0.70      ak   0.70
2     0.3    0.80      if   0.30
3     0.4    0.90      if   0.40
4     0.5    0.11      ak   0.11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...