有条件地将值分配给Pandas列

时间:2019-03-25 05:12:17

标签: 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_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

但是我不认为这是最好的或正确的方法。我正在寻找一种简单而有效的解决方案。

1 个答案:

答案 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