如何使用列值检查在单列中合并2列

时间:2019-12-11 10:46:27

标签: python pandas dataframe concat

我想从Column1不等于ANY的数据帧中合并两列:

DataFrame:

   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。

谢谢。

4 个答案:

答案 0 :(得分:2)

您可以

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

答案 1 :(得分:0)

代码如下:

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

答案 2 :(得分:0)

在这种情况下,因为我们正在处理字符串,所以for循环比应用要快一些。

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)]

答案 3 :(得分:0)

如果需要考虑速度,则应使用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']
)