繁体   English   中英

Pandas 数据框上的 for 循环和条件

[英]For loop and conditions on pandas dataframe

假设我有以下列表:

l = ['AF_','LT_']

以及以下数据框:

df = pd.DataFrame({'col1':[1,2,3,4,5],'col2':['AF_123_PX','OX','AF','BX','LT_123']})

   col1       col2
0     1  AF_123_PX
1     2         OX
2     3         AF
3     4         BX
4     5     LT_123

现在我想迭代col2的值,如果我看到l的元素,我会将它分开并将它们归咎于新列,如果没有,我将分配全局。 结果应如下所示:

   col1       col2    col3    col4
0     1  AF_123_PX      AF  123_PX
1     2         OX  Global      OX
2     3         AF  Global      AF
3     4         BX  Global      BX
4     5     LT_123      LT     123

如您所见,列表l存在AF_LT_ 我写了以下内容:

for index, row in df.iterrows():
    if df['col2'].str.contains(l):
        df['col3'] == l
        df['col4'] == df.col2.str.split("_", n=1).str[1]
    else: 
        df['col3'] == 'Global'
        df['col4'] == df['col2']

哪个不起作用,我想知道我哪里出错了?

尝试:

l = ['AF_','LT_']
#your list
c=df['col2'].str.contains(f'({"|".join(l)})')
#checking if any element inside your list is present in col2 or not

最后:

df.loc[~c,'col2']='Global_'+df.loc[~c,'col2']
#adding 'Global_' to col2 where the condition c failed
df[['col3','col4']]=df['col2'].str.split('_',1,expand=True)
#Finally spliting the columns and assigning it to df

df输出:

  col1  col2       col3     col4
0   1   AF_123_PX   AF      123_PX
1   2   Global_OX   Global  OX
2   3   Global_AF   Global  AF
3   4   Global_BX   Global  BX
4   5   LT_123      LT      123

我通常会建议不要创建新列,因为字符串将被拆分为超过 2 个部分的情况,那么您可以像这样存储它:

df['col3'] = df['col2'].str.split('({})'.format('|'.join(l))).map(lambda x: [y for y in x if y != ''])

   col1       col2           col3
0     1  AF_123_PX  [AF_, 123_PX]
1     2         OX           [OX]
2     3         AF           [AF]
3     4         BX           [BX]
4     5     LT_123     [LT_, 123]

也就是说,您可以像这样实现预期的输出:

df[['col3', 'col4']] = df['col2'].str.split('({})'.format('|'.join(l)), expand = True).drop(0,axis=1)
df['col3'] = df['col3'].fillna('Global')
df.loc[df['col4'].isna(), 'col4'] = df.loc[df['col4'].isna(), 'col2']

   col1       col2    col3    col4
0     1  AF_123_PX     AF_  123_PX
1     2         OX  Global      OX
2     3         AF  Global      AF
3     4         BX  Global      BX
4     5     LT_123     LT_     123

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM