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

时间:2021-04-09 20:02:47

标签: python pandas numpy

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

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 和 s4_norm 不用于字符串计算,因为 s4 值为 0。

同样地,任何 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 不应该在字符串生成中考虑。

2 个答案:

答案 0 :(得分:1)

您可以将 df1 连接到 df2 作为字符串,然后使用矩阵乘法 @

(df1.astype(str).values + df2) @ df1.T.values

输出:

                 0
0  111101110100101
1  101111101101110
2  100110100110111

答案 1 :(得分:0)

Quang Hoang 的矩阵乘法令人印象深刻。也可以将 apply()itertools.compress() 一起使用。 itertools.compress(data, selectors) 用于从数据中过滤元素,其中选择器中相应元素的计算结果为 False

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