我想根据其他表中的值附加字符串。
DF1:
s1 s2 s3 s4 s5 s6
-----------------
1 1 1 0 1 1
Df2与相同
Df2:
Tech_ID Std_Id s1_Norm s2 Norm S3 Norm S4_Norm S5 Norm S6_Norm
----------------------------------------------------
1 1 11 01 10 11 00 01
1 7 01 11 01 11 01 10
2 4 00 10 00 11 10 11
3 8 10 11 01 01 11 00
.
.
.
现在想要生成基于DF1值的字符串
对于第一排。s1+s1_Norm+s2+s2_Norm+s3+s3_Norm+s5+s5_Norm+s6+s6_Norm
由于s4值为0,所以在字符串计算中不采用s4和s4_norm。
以相同的方式,任何S序列值为0,则该S位的值和字符串生成中未考虑的S_Norm位。
预期结果:
Tech_ID Std_Id Result
---------------------------------
1 1 111101110100101
1 7 101111101101110
2 4 100110100110111
3 8 100111101111100
.
.
.
同样,如果s4=1且s3=0,则s3和s3_Norm不应在字符串生成中考虑。
您可以将df1
和df2
连接为字符串,然后使用矩阵乘法@
:
(df1.astype(str).values + df2) @ df1.T.values
输出:
0
0 111101110100101
1 101111101101110
2 100110100110111
邝晃的矩阵乘法真的很令人印象深刻。也可以将apply()
与itertools.compress()
一起使用。CCD_ 6用于从数据中过滤元素,其中选择器中的相应元素评估为CCD_。
import itertools
d_ = (df1.astype(str).values + df2.iloc[:,2:]).apply(lambda row: ''.join(itertools.compress(row.tolist(), df1.loc[0].tolist())), axis=1)
df_ = pd.concat([df2.iloc[:, :2], d_], axis=1)
# print(df_)
Tech_ID Std_Id 0
0 1 1 111101110100101
1 1 7 101111101101110
2 2 4 100110100110111
3 3 8 110111101111100