如何使用列值检查在单列中连接 2 列

How to Concat 2 columns in single column with column value check

我想连接 Column1 不等于 ANY 的数据框中的两列:

数据框:

   COLUMN1 | COLUMN2
0     A    |   FOO
1     B    |   BAR  
2    ANY   |   FOO
3    ANY   |   BAR
4     C    |   FOO

因此我想要如下数据框

   COLUMN1 | COLUMN2
0     A    |  FOO_A
1     B    |  BAR_B
2    ANY   |  FOO
3    ANY   |  BAR  
4     C    |  FOO_C

ANY是变量,可以表示Null、EmptyString、String、Number。

谢谢。

代码如下:

variable = "ANY"  #You could change this to any variable value
for idx,row in df.iterrows():
    if row["COLUMN1"] != variable:
        df.loc[idx,"COLUMN2"] = row["COLUMN2"] + "_" + row["COLUMN1"]

输出:

print(df)

  COLUMN1 COLUMN2
0       A   FOO_A
1       B   BAR_B
2     ANY     FOO
3     ANY     BAR
4       C   FOO_C

你可以做到

df['COLUMN2']=df.apply(lambda row:row['COLUMN2']+'_'+row['COLUMN1'] if row['COLUMN1']!='ANY' else row['COLUMN2'],axis=1)

在这种情况下,for 循环比 apply 快一点,因为我猜我们正在处理字符串。

def concat_str(x,y):
    return x + "_" + y if y != 'ANY' else x

df['col2'] = [concat_str(x, y) for x, y in zip(df.col2.values, df.col1.values)]

如果速度是一个问题,您应该使用 numpy 而不是 .apply 或任何手动编写的循环。特别是,numpy.where() 应该适用于您的情况:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'COLUMN1': ['A','B','ANY','ANY','C'],
    'COLUMN2': ['FOO','BAR','FOO','BAR','FOO']
})

df['COLUMN2'] = np.where(
    df['COLUMN1'].eq('ANY'),
    df['COLUMN2'],
    df['COLUMN1'] + '_' + df['COLUMN2']
)