我想从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。
谢谢。
答案 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']
)