使用IF语句对pandas列执行操作

2024-09-28 21:51:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框

df = pd.DataFrame({"Id": [77000581079,77000458432,77000458433,77000458434,77000691973], "Code": ['FO07930', 'FO73597','FO03177','FO73596','FOZZZZZ']})

我想检查列Code中每一行的值,看看它是否匹配strFOZZZZ

如果操作是False,那么我希望将concatenate{}值转换为Code

因此,预期产出将为:

    Id          Code
0   77000581079 FO0793077000581079
1   77000458432 FO7359777000458432
2   77000458433 FO0317777000458433
3   77000458434 FO7359677000458434
4   77000691973 FOZZZZZ

我试过了

df['Id'] = df['Id'].astype(str)
for x in df['Id']:
    if x == 'FOZZZZ':
     pass
else:
    df['Id']+df['Code']

我想它会在Code列中的每一行上运行,以检查它是否是='FOZZZZ'如果没有,则concatenate列,但没有欢乐


Tags: 数据idfalsedataframedfcodepdconcatenate
3条回答

pandas.Series.whereeq一起使用:

s = df["Code"]
df["Code"] = s.where(s.eq("FOZZZZZ"), s + df["Id"].astype(str))
print(df)

输出:

                 Code           Id
0  FO0793077000581079  77000581079
1  FO7359777000458432  77000458432
2  FO0317777000458433  77000458433
3  FO7359677000458434  77000458434
4             FOZZZZZ  77000691973

试试np.where(condition, solution if condition is true, solution if condition is false)。如果FOZZZZZ存在,则使用.isin(to check),并使用~反向构建布尔查询以用作条件

df['Code']=np.where(~df['Code'].isin(['FOZZZZZ']), df.Id.astype(str)+df.Code,df.Code)

     Id                Code
0  77000581079  77000581079FO07930
1  77000458432  77000458432FO73597
2  77000458433  77000458433FO03177
3  77000458434  77000458434FO73596
4  77000691973             FOZZZZZ
df.loc[df['Code']!='FOZZZZZ', 'Code'] = df['Code'] + df['Id'].astype(str)

相关问题 更多 >