如何为所有真值和假值映射1和0

2024-09-30 22:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在数据帧中有两列,列\u 1和列\u 2如果都包含相同的值,则将其标记为1作为0

我试过这个,但它返回的大小1和内表,它包含大小416系列列表

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

我甚至试过这个,但它没有地图

      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'}))

如果我想更新df['CASE#'],其中包含/as 2而不是0

     COLUMN_3  CASE#  
    25/PACK      0  
    EACH         1 
    100/BOTTLE   0  
    25/PACK      0 
     NaN         0
    3/PACK       0 
    EACH         1  

Tags: 数据标记mapdf列表columnpacklist
2条回答

用途:

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

我认为最简单的方法是将布尔掩码转换为True/False1/0映射的整数:

df['CASE#'] = splitsE.astype(int)

另一种解决方案是使用^{}

df['CASE#'] = np.where(splitsE, 1, 0)

map已删除词典()

df['CASE#'] = splitsE.map({True:'1', False:'0'})

编辑:对于另一个条件,请使用^{}

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

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

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

相关问题 更多 >