我在数据框Column_1和Column_2中有两个列,如果它们都包含相同的值,则将其标记为1为0
我尝试过此方法,但它返回的是大小为1的列表,并且在列表中它包含一系列大小为416的列表
K.permute_dimensions(K.dot(x, self.WK),(0,2,1))
我什至也尝试过这个,但是没有映射
splitsE = [(df.COLUMN_1.str.contains(' Each')) &
(df.COLUMN_2.str.contains(' EACH'))]
如果我想更新df ['CASE#'],其中它包含/代替0的值为2
splitsE = [(df.COLUMN_1.str.contains(' Each')) &
(df.COLUMN_2.str.contains(' EACH'))]
splitsE = list(map(list, zip(*splitsE)))
df['CASE#'] = pd.Series(splitsE).map(({True:'1', False:'0'}))
答案 0 :(得分:3)
使用:
splitsE = (df.COLUMN_1.str.contains(' Each')) & (df.COLUMN_2.str.contains(' EACH'))
我认为最简单的方法是将True/False
到1/0
映射的布尔掩码转换为整数:
df['CASE#'] = splitsE.astype(int)
另一种解决方案是使用numpy.where
:
df['CASE#'] = np.where(splitsE, 1, 0)
或者用删除了一个map
的字典的()
:
df['CASE#'] = splitsE.map({True:'1', False:'0'})
编辑:对于其他情况,请使用numpy.select
:
mask1 = df.COLUMN_3.str.contains('EACH', case=False, na=False)
mask2 = df.COLUMN_3.str.contains('/', case=False, na=False)
df['CASE#'] = np.select([mask1, mask2], [1, 2], default=0)
print (df)
COLUMN_3 CASE#
0 25/PACK 2
1 EACH 1
2 100/BOTTLE 2
3 25/PACK 2
4 NaN 0
5 3/PACK 2
6 EACH 1
答案 1 :(得分:0)