我有一个像这样的DataFrame:
col1 col2
1 0
0 1
0 0
0 0
3 3
2 0
0 4
如果col2是>我想添加一个1的列。否则为0或0。如果我使用R,我会做
之类的事情df1[,'col3'] <- ifelse(df1$col2 > 0, 1, 0)
我如何在python / pandas中执行此操作?
答案 0 :(得分:8)
您可以将布尔系列df.col2 > 0
转换为整数系列(True
变为1
而False
变为0
):
df['col3'] = (df.col2 > 0).astype('int')
(要创建新列,只需将其命名并将其指定给与DataFrame长度相同的Series,数组或列表。)
这会产生col3
:
col2 col3
0 0 0
1 1 1
2 0 0
3 0 0
4 3 1
5 0 0
6 4 1
创建列的另一种方法可能是使用np.where
,它允许您为true或false值指定值,并且可能更接近R函数ifelse
的语法。例如:
>>> np.where(df['col2'] > 0, 4, -1)
array([-1, 4, -1, -1, 4, -1, 4])
答案 1 :(得分:1)
我假设您正在使用Pandas(因为&#39; df&#39;表示法)。如果是这样,您可以使用.gt(大于)将col3与零进行比较,为col3指定一个布尔标志。将结果乘以1会将布尔标志转换为1和0。
df1 = pd.DataFrame({'col1': [1, 0, 0, 0, 3, 2, 0],
'col2': [0, 1, 0, 0, 3, 0, 4]})
df1['col3'] = df1.col2.gt(0) * 1
>>> df1
Out[70]:
col1 col2 col3
0 1 0 0
1 0 1 1
2 0 0 0
3 0 0 0
4 3 3 1
5 2 0 0
6 0 4 1
您也可以使用lambda表达式来获得相同的结果,但我相信上面的方法对于您给出的示例更简单。
df1['col3'] = df1['col2'].apply(lambda x: 1 if x > 0 else 0)