首页 > 解决方案 > Pandas 基于所有现有列的值创建新列,第一列除外

问题描述

我有一个这样的数据框:

id  day1    day2    day3    day4    day5                                                                                        
1   24      0       0       0       0
2   35      0       0       0       0
3   9       0       0       0       0
4   20      0       0       0       0
5   4       0       0       0       0
6   3       0       0       1       0
7   3       0       0       0       0
8   8       0       2       0       0

我选择一个子集,其中所有列中的值都为零,但第一列除外:

df[pd.np.where(df[['day2', 'day3', 'day4', 'day5']].eq(0).all(1), True, False)]

(附带问题:有没有更简单的方法而不是输入所有列的名称?)

0如果上述条件是,我希望创建一个新列并分配True,否则-1

所以我尝试了:

df['new'] = df.apply(pd.np.where(df[['day2', 'day3', 'day4', 'day5']].eq(0).all(1), 0, -1), axis=1) 

但是得到了错误:

TypeError: ("'numpy.ndarray' object is not callable", 'occurred at index 1')

我期待收到这个数据帧的结果:

id  day1    day2    day3    day4    day5    new                                                                                       
1   24      0       0       0       0       0
2   35      0       0       0       0       0
3   9       0       0       0       0       0
4   20      0       0       0       0       0
5   4       0       0       0       0       0
6   3       0       0       1       0       -1
7   3       0       0       0       0       0
8   8       0       2       0       0       -1

你有什么想法?

标签: pythonpandasconditional

解决方案


考虑id是指数,

 df['new']=np.where(df.iloc[:,1:].eq(0).all(1),0,-1)

推荐阅读