我有一个熊猫DataFrame,其中包含如下内容:
A A_type
"Hello" String
15 Integer
"Hi" String
56.78 Float
我想创建第三列,如果A具有名为“ String”的对应“ A_type”元素,则报告与A相同的值,否则打印“空白”。该列如下所示:
B
"Hello"
"blank"
"Hi"
"blank"
我尝试做类似的事情:
df['B'] = df['A']
for j in df['A_type']:
for i in df['B']:
if j == "String":
i = i
else:
i = "blank"
有没有更有效的方法来解决此类问题,从而帮助我避免所有这些for循环?
非常感谢
答案 0 :(得分:2)
使用Series.where
或
Series.mask
处于颠倒状态,或numpy.where
:
df['B'] = df['A'].where(df['A_type'] == "String", 'blank')
#df['B'] = df['A'].mask(df['A_type'] != "String", 'blank')
#alternative
#df['B'] = np.where(df['A_type'] == "String", df['A'], 'blank')
print (df)
A A_type B
0 Hello String Hello
1 15 Integer blank
2 Hi String Hi
3 56.78 Float blank
答案 1 :(得分:0)
df['B']=df['A'].copy()
df.loc[df['A_type']!="String", 'B'] = "blank"
O / P:
A A_type B
0 Hello String Hello
1 blank blank blank
2 Hi String Hi
3 blank blank blank
说明:
Col A
blank
而不是A_Type
的{{1}} 答案 2 :(得分:0)
还可以尝试:
df['B'] = df.apply(lambda x: x['A'] if x['A_type'] == 'String' else "Blank", axis = 1)