Python 有条件地为列指定值

Python 有条件地为列指定值,python,pandas,Python,Pandas,我需要根据a列中的值在B列中设置一个变量,如下所示: ABC 1 PQR- ABC- PQR- ABC- PQR- 在我的数据中,针对A列的某些值,我在B列中设置了一个“1”。但问题是,它只针对第一次出现的值。与上面的“ABC”类似,“1”仅为第一次出现设置 我需要为所有这些剩余值设置“1”。 PS-有很多条目,所以我不能硬编码值,比如“为所有ABC设置B列为1” 我试过以下逻辑- #Filter out entries with a '1' set df_one = df_Consolidat

我需要根据a列中的值在B列中设置一个变量,如下所示:

ABC 1
PQR-
ABC-
PQR-
ABC-
PQR-

在我的数据中,针对A列的某些值,我在B列中设置了一个“1”。但问题是,它只针对第一次出现的值。与上面的“ABC”类似,“1”仅为第一次出现设置

我需要为所有这些剩余值设置“1”。 PS-有很多条目,所以我不能硬编码值,比如“为所有ABC设置B列为1”

我试过以下逻辑-

#Filter out entries with a '1' set
df_one = df_Consolidated[df_Consolidated['Val'] == 1]

#Store these values in a list
list_l2 = []
for s in df_one:
    list_l2.append(df_one['Text String'])

#Check in the dataframe column once again iterating over the list
但我认为这不是最好或正确的方法。我正在寻找一个简单而有效的解决方案。

数据(test.csv):

代码:

输出:

  Text val
0  ABC   1
1  PQR   -
2  ABC   1
3  PQR   -
4  ABC   1
5  PQR   -

说明:

这里
df[df['val']=='1']['Text']
将获得所有文本的
val='1'

df['Text'].isin((df[df['val']='1']['Text'])
将检查df[df['val']='1']['Text']中的每一行是否有文本它将返回
布尔值


df.loc
将val赋值给1

我认为最简单的是
df.loc[df[“A”]=“ABC”,“B”]=1
@jezrael他说只有第一次出现的文本才有值1,所以使用“ABC”是静态的。这将无法解决像“ABC”这样的其他文本出现的问题,好的,所以更改
df.loc[df['Text'].isin((df.loc[df['val']=='1','Text']),'val']='1'
我得到了无效的类型比较:TypeError解决了它,只是'1'必须是1我必须使用
'1'
,因为我使用了csv导入,
val
列中的所有其他值都是字符串类型,所以熊猫会自动将
val=1
转换为字符串类型
df = pd.read_csv('test.csv')
df.loc[df['Text'].isin((df[df['val'] == '1']['Text'])), 'val'] = '1'
print(df)
  Text val
0  ABC   1
1  PQR   -
2  ABC   1
3  PQR   -
4  ABC   1
5  PQR   -
0     True
1    False
2     True
3    False
4     True
5    False