2015-05-01 124 views
0

我想根据第四列中的值从另外两列填充一列中的值。根据另一列的值从一列中复制值

我有四列的熊猫数据框:A,B,C,d

df_copy = df.copy() 
for i, row in df.iterrows(): 
    if 'Test' in row.D: 
     df_copy.loc[i, 'A'] = row.B 
    elif 'Other' in row.D: 
     df_copy.loc[i, 'A'] = row.C 

这工作,但速度很慢。有没有更高效的方法?

+0

您的D行只包含'Test'和'Other'吗? – joris

+0

行D由一个较长的字符串组成,其中包含'测试'或'其他' –

+0

啊,在这种情况下,您可以使用'str.contains',更新我的答案 – joris

回答

1

您可以使用“布尔索引”这个,而不是遍历所有行:

df_copy.loc[df['D']=='Test', 'A'] = df['B'] 
df_copy.loc[df['D']=='Other', 'A'] = df['C'] 

如果您知道列d仅由这两个值,它可以更短:

df_copy['A'] = df['B'] 
df_copy.loc[df['D']=='Other', 'A'] = df['C'] 

如果你想有一样的in运算符来测试如果子在列,你可以这样做:

df['D'].str.contains('Other') 

成为布尔值而不是df['D']=='Other'

+0

这可行,注意不能使用'in'布尔测试。 –

+0

更新了我的答案 – joris

相关问题