根据另一列更改 pandas 列
Change pandas column based on another column
我有一个 pandas DataFrame 包含如下所示:
A A_type
"Hello" String
15 Integer
"Hi" String
56.78 Float
如果 A 具有名为 "String" 的相应 "A_type" 元素,我想创建第三列报告与 A 相同的值,否则打印 "blank"。该列看起来像:
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 循环?
非常感谢
使用Series.where
或
Series.mask
with inverted condition, or 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
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
不是 String
你也可以试试:
df['B'] = df.apply(lambda x: x['A'] if x['A_type'] == 'String' else "Blank", axis = 1)
我有一个 pandas DataFrame 包含如下所示:
A A_type
"Hello" String
15 Integer
"Hi" String
56.78 Float
如果 A 具有名为 "String" 的相应 "A_type" 元素,我想创建第三列报告与 A 相同的值,否则打印 "blank"。该列看起来像:
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 循环?
非常感谢
使用Series.where
或
Series.mask
with inverted condition, or 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
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
不是String
你也可以试试:
df['B'] = df.apply(lambda x: x['A'] if x['A_type'] == 'String' else "Blank", axis = 1)