我有一个数据框架
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我必须插入另一栏,即
生成的数据框架应该如下所示
我编写了一个简单的代码,使用for循环,我无法弄清楚如何优化它,因为在数据增长的循环中,循环会变得效率低下。
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发布于 2020-03-30 08:49:03
试试下面的代码:
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循环
df.loc[df['ch_dist'] == 'if', 'if_ak'] = df['if_num']
df.loc[df['ch_dist'] != 'if', 'if_ak'] = df['ak_num']发布于 2020-03-30 08:58:48
您可以使用布尔掩码来乘法相应的列:
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.11https://stackoverflow.com/questions/60926617
复制相似问题