如何使用列值检查在单列中连接 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']
)
我想连接 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']
)