Python 有条件地为列指定值
我需要根据a列中的值在B列中设置一个变量,如下所示: ABC 1Python 有条件地为列指定值,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
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