根据另一列更改 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.whereSeries.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

解释:

  1. 复制 Col A
  2. 仅将值更新为 blank,其中 A_Type 不是 String

你也可以试试:

df['B'] = df.apply(lambda x: x['A'] if x['A_type'] == 'String' else "Blank", axis = 1)