如何根据条件追加字符串列



我想根据其他表中的值附加字符串。

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不应在字符串生成中考虑。

您可以将df1df2连接为字符串,然后使用矩阵乘法@:

(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

最新更新