根据列A和B的内容创建X1-Xn列

问题描述

我有两个数据框:

df1

enter image description here

df2

enter image description here

并且需要根据df1df2['B']添加新列。 如果在此迭代中,A列中的行的内容包含来自B列中的行的文本,则在新列中写入1。如果不是,则为0。我们还从列B获取列的名称。通过下面的示例可能应该更清楚:

enter image description here

解决方法

您可以首先将每个值与df1.A进行比较,如下:

pd.DataFrame({val:(df1.A.str.contains(val)).map(int) for val in df2.B.unique()})

如果要将其与df1结合使用,只需使用pd.concat()

pd.concat([df1,pd.DataFrame({val:(df1.A.str.contains(val)).map(int) for val in df2.B.unique()})],axis =1)
,

尝试此操作,尝试在每行之后打印df以更好地理解它:

df = df1.merge(df2,on=['N'],how='left').fillna('0')
df = df.pivot(index=['N','A_x'],columns=['A_y'],values=['A_y']).fillna(0)
df.columns = df.columns.map('_'.join)
df = df.replace('\w+',1,regex=True)
df.reset_index(inplace=True)
df.columns = df.columns.str.replace('A_y_','',regex=True).str.replace('A_x','A')
df.drop(columns=['0'],inplace=True)
print(df)


   N        A  asd  asd asd  asdasd
0  1  asd asd    0        1       0
1  2      asd    1        0       0
2  3   asdasd    0        0       1
3  4      xcv    0        0       0
4  5   asdasd    0        0       0
,
defects = df2['B'].unique()
for i in defects:
    df1[i]= df1["A"].map(lambda x: "1" if i in x else "0")