我有一个DataFrame如下:
df
A B C D E key
0 test Z 10.0 a a 10111
1 test A 10.0 a a 10111
2 test x 2.0 a b 11010
3 test 5 12.0 b b 10100
4 test x 5.0 c b 11000
5 test 2 14.0 g c 10111
我需要得到的是将所有字符串相应地连接到key列:
keyat position[0]是 for col A,keyat position[1]是 forcol B等等...
每个1in 用于拍摄,每个0用于跳过列
结果应如下所示:
A B C D E key key_val
0 test Z 10.0 a a 10111 test10.0aa
1 test A 10.0 a a 10111 test10.0aa
2 test x 2.0 a b 11010 testxa
3 test 5 12.0 b b 10100 test12.0
4 test x 5.0 c b 11000 testx
5 test 2 14.0 g c 10111 test14.0gc
到目前为止我所做的 - 我创建了 key_list 列:
df['key_list'] = df['key'].apply(lambda x: list(str(x)))
df
A B C D E key key_list
0 test Z 10.0 a a 10111 [1, 0, 1, 1, 1]
1 test A 10.0 a a 10111 [1, 0, 1, 1, 1]
2 test x 2.0 a b 11010 [1, 1, 0, 1, 0]
3 test 5 12.0 b b 10100 [1, 0, 1, 0, 0]
4 test x 5.0 c b 11000 [1, 1, 0, 0, 0]
5 test 2 14.0 g c 10111 [1, 0, 1, 1, 1]
下一步我已经尝试过了(我想乘以 1 或 0 来包含或排除字符串):
df.apply((df['A'].astype(str) * df['key_list'][0]) +
(df['B'].astype(str) * df['key_list'][1]) +
(df['C'].astype(str) * df['key_list'][2]) +
(df['D'].astype(str) * df['key_list'][3]) +
(df['E'].astype(str) * df['key_list'][4]), axis=1)
但这似乎是错误的想法:ValueError: operands could not be broadcast together with shapes (6,) (5,)。我遵循字符串连接的常见做法,只是额外的步骤:
df['A'].astype(str) + df['B'].astype(str) + df['C'].astype(str) + df['D'].astype(str) + df['E'].astype(str)
鸿蒙传说
相关分类