2017-08-14 150 views
2

我有一个dafatframe像这样的内容:蟒蛇大熊猫 - 列变化值布尔基于另一列

A  B 
0 NaN string1 
1 NaN string2 
2 Nan string1 
3 Nan string1 

我如何更改列所有值使得它们基于布尔列B中同一索引处的条目是否包含某个字符串“stringX”?

+1

在这种情况下,如果stringX =“string1”,那么列A中的所需输出为真假False True True –

+0

谢谢jezrael! –

+0

不客气! – jezrael

回答

3

我想你需要指定布尔面具,而不是==可以使用eq或使用assign

#if need True False values by condition 
stringX = "string1" 
df['A'] = df['B'] == stringX 
print (df) 
     A  B 
0 True string1 
1 False string2 
2 True string1 
3 True string1 

df['A'] = df['B'].eq(stringX) 
print (df) 
     A  B 
0 True string1 
1 False string2 
2 True string1 
3 True string1 

df = df.assign(A=df['B'].eq(stringX)) 
print (df) 
     A  B 
0 True string1 
1 False string2 
2 True string1 
3 True string1 

#if need values of column by condition 
df.loc[df['B'] == 'string1', 'A'] = df['B'] 
print (df) 
     A  B 
0 string1 string1 
1  NaN string2 
2 string1 string1 
3 string1 string1 

#if need scalar by condition 
df.loc[df['B'] == 'string1', 'A'] = 1 
print (df) 
    A  B 
0 1 string1 
1 NaN string2 
2 1 string1 
3 1 string1 

#if need if else condition with 2 scalars 
df['A'] = np.where(df['B'] == 'string1', 1, 2) 
print (df) 
    A  B 
0 1 string1 
1 2 string2 
2 1 string1 
3 1 string1