Skip to main content
 首页 » 编程设计

python之DataFrame 有条件地组合列

2025年05月04日21落叶无声

我有一个包含 28 列的 DataFrame。我想有条件地将 2 列组合在一起以创建一个新列,当我操作数据并引入其他数据集时,它将成为我的键。我将不得不在每个数据集中再次创建 key 。

我想将列“CN”和“ON”连接在一起。有时'ON'是空白的或者只有一个空格,所以我需要先修剪它。从逻辑上讲,我正在尝试执行以下操作。

如果 Trim('ON') 为空,则 'CN ON' = 'CN' ELSE 'CN ON' = 'CN'+'-'+'ON'

数据框

   CN  ON    POC 
0  W1      Name1 
1  Z2      Name3 
2  B3  YY  Name1 
3  W1  A2  Name4 
 
import pandas as pd 
df = pd.DataFrame({'CN': ['W1', 'Z2', 'B3', 'W1'], 
                   'ON': ['', ' ', 'YY', 'A2'], 
                   'POC': ['Name1', 'Name3', 'Name1', 'Name4'] 
                   }) 

期望的结果

   CN ON  CN  ON    POC 
0     W1  W1      Name1 
1     Z2  Z2      Name3 
2  B3-YY  B3  YY  Name1 
3  W1-A2  W1  A2  Name4 
 
import pandas as pd 
df = pd.DataFrame({'CN ON': ['W1','Z2','B3-YY','W1-A2'], 
                   'CN': ['W1', 'Z2', 'B3', 'W1'], 
                   'ON': ['', ' ', 'YY', 'A2'], 
                   'POC': ['Name1', 'Name3', 'Name1', 'Name4'] 
                   })        

我找到了一些类似的问题和答案,但我无法完全解决问题。

这是我目前所拥有的。我无法弄清楚如何修剪和检查该字段是否为空白。它目前无法正常工作,我觉得我碰壁了。

import numpy as np 
df['CN ON'] = df.apply(lambda r: (r['CN'] if np.where(df['ON'].applyman(lambda x: x == '')) else r['CN'] + '-' + r['ON']) 

如有任何指导或帮助,我们将不胜感激!

请您参考如下方法:

我会做字符串求和

(df.CN+ '-' + df.ON).str.strip('- ') 
Out[98]:  
0       W1 
1       Z2 
2    B3-YY 
3    W1-A2 
dtype: object