我需要根据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
但是我不认为这是最好的或正确的方法。我正在寻找一种简单而有效的解决方案。
答案 0 :(得分:2)
data(test.csv):
Text,val
ABC,1
PQR,-
ABC,-
PQR,-
ABC,-
PQR,-
代码:
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 -
说明:
这里df[df['val'] == '1']['Text']
将获得所有文本val = '1'
df['Text'].isin((df[df['val'] == '1']['Text'])
将检查每一行中df[df['val'] == '1']['Text']
中是否包含文本,并返回Boolean
喜欢
0 True
1 False
2 True
3 False
4 True
5 False
和df.loc
将val分配给1