2

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

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

在我的数据中,针对 Column AI 的某些值在 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

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

4

1 回答 1

2

数据(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']将获得所有 Text 拥有的val = '1'

df['Text'].isin((df[df['val'] == '1']['Text'])将检查每一行是否有 Textdf[df['val'] == '1']['Text']将返回Boolean

0     True
1    False
2     True
3    False
4     True
5    False

并将df.locval 分配给 1

于 2019-03-25T05:25:15.417 回答