python - DataFrame 有条件地组合列

标签 python pandas

我有一个包含 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

关于python - DataFrame 有条件地组合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59081004/

相关文章:

python - python中有没有 "green"库用于读取图像并获取RGB值?

python - 如何在 Google Colab 中编辑和保存文本文件 (.py)?

python - 防止 matplotlib 将我的轴重新设置为零

python - 将一个数组的每个元素乘以另一个数组的每个元素

python - 使用值列表填充空单元格

python - Numpy 3d 数组的切片不一致

python - 尝试加入两个 pandas 数据帧但得到 "ValueError: You are trying to merge on object and int64 columns."?

python - Pandas - 按每个可能的键组合聚合

python - 在 Python 中跨列应用多个函数(均值、STD 等)

python - Pandas 从列表中重命名 df 行