如何为所有正确和错误映射1和0

时间:2019-09-02 11:46:42

标签: python pandas

我在数据框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'}))

2 个答案:

答案 0 :(得分:3)

使用:

splitsE = (df.COLUMN_1.str.contains(' Each')) & (df.COLUMN_2.str.contains(' EACH'))

我认为最简单的方法是将True/False1/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)

如果我正确理解了您的问题,以下是解决方法:

import pandas as pd
data =  [[1,2], [2,5], [3,3], [4,7],[9,9], [6,5]]
df = pd.DataFrame(columns=['col1', 'col2'], data=data)
df.head()

df.head() table

df['comp'] = 1 * (df['col1'] == df['col2'])
df.head()

df.head() table 2