首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用熊猫消除循环

用熊猫消除循环
EN

Stack Overflow用户
提问于 2020-03-30 08:26:53
回答 2查看 41关注 0票数 0

我有一个数据框架

代码语言:javascript
复制
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

点击这里看

我必须插入另一栏,即

  • if_ak:如果它的ch_dist是' if‘,它将有来自ifa_num的号码,否则它将从ak_num获得号码。

生成的数据框架应该如下所示

ak柱

我编写了一个简单的代码,使用for循环,我无法弄清楚如何优化它,因为在数据增长的循环中,循环会变得效率低下。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-30 08:49:03

试试下面的代码:

代码语言:javascript
复制
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

而不是for循环

代码语言:javascript
复制
df.loc[df['ch_dist'] == 'if', 'if_ak'] = df['if_num']
df.loc[df['ch_dist'] != 'if', 'if_ak'] = df['ak_num']
票数 1
EN

Stack Overflow用户

发布于 2020-03-30 08:58:48

您可以使用布尔掩码来乘法相应的列:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60926617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档