基于同一索引上的另一列值按系列拆分字符串

2024-05-16 10:55:30 发布

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

你好,我有熊猫数据框

    code                                 LocationCod
0.  999010001-R-XQK33-4658-999-          R-XQK33
1.  602444201-N-FKD2-000257999-999-      N-FKD2
2.  602016601-N-TAS-777-999-             N-TAS
3.  602010001-345-999-999-               345

我想根据column LocationCod中的值拆分column Code中的值,该值应该扩展到新的列CategCode和MainCode。required表如下所示

    code                                 LocationCod     CategCode           MainCode
0.  999010001-R-XQK33-4658-999-          R-XQK33         4658-999-           999010001
1.  602444201-N-FKD2-000257999-999-      N-FKD2          000257999-999-      602444201
2.  602016601-N-TAS-777-999-             N-TAS           777-999-            602016601
3.  602010001-345-999-999-               345             999-999-            602010001

请帮忙


Tags: 数据requiredcodecolumntasmaincodexqk33locationcod
3条回答

试试这个:

df['CategCode']=[df.code.values[i].split(df.LocationCod.values[i])[-1][1:] for i in range(len(df))]
df['MainCode']=[df.code.values[i].split(df.LocationCod.values[i])[0][:-1] for i in range(len(df))]

您可以将^{}与自定义lambda一起使用:

In [2270]: df[['MainCode', 'CategCode']] = pd.DataFrame(df.apply(lambda x: x['code'].split(x['LocationCod']), 1).tolist())

In [2271]: df
Out[2271]: 
                              code LocationCod    MainCode        CategCode
0      999010001-R-XQK33-4658-999-     R-XQK33  999010001-       -4658-999-
1  602444201-N-FKD2-000257999-999-      N-FKD2  602444201-  -000257999-999-
2         602016601-N-TAS-777-999-       N-TAS  602016601-        -777-999-
3           602010001-345-999-999-         345  602010001-        -999-999-

您可以从新列中删除-,以匹配预期的输出,如下所示:

In [2281]: df.MainCode = df.MainCode.str[:-1]
In [2280]: df.CategCode = df.CategCode.str[1:]

In [2282]: df
Out[2282]: 
                              code LocationCod   MainCode       CategCode
0      999010001-R-XQK33-4658-999-     R-XQK33  999010001       4658-999-
1  602444201-N-FKD2-000257999-999-      N-FKD2  602444201  000257999-999-
2         602016601-N-TAS-777-999-       N-TAS  602016601        777-999-
3           602010001-345-999-999-         345  602010001        999-999-

您可以尝试以下方法:

df = pd.DataFrame({
'Code': ['999010001-R-XQK33-4658-999-', '602444201-N-FKD2-000257999-999-','602016601-N-TAS-777-999-','602010001-345-999-999- '],
'LocationCod': ['R-XQK33','N-FKD2','N-TAS',345]})



df['MainCode']=df['Code'].apply(lambda x:x.split('-')[0]+'-')
df['CategCode']=df['Code'].apply(lambda x:'-'.join(x.split('-')[-3:]))
print(df)

结果:

                              Code LocationCod    MainCode       CategCode
0      999010001-R-XQK33-4658-999-     R-XQK33  999010001-       4658-999-
1  602444201-N-FKD2-000257999-999-      N-FKD2  602444201-  000257999-999-
2         602016601-N-TAS-777-999-       N-TAS  602016601-        777-999-
3          602010001-345-999-999-          345  602010001-       999-999-

相关问题 更多 >