Pandas 根据所有现有列的值创建新列,第一列除外
Pandas create new columns base on all existing columns' values, except the first column
我有一个这样的数据框:
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
I select 一个子集,其中所有列中的值都为零,第一列除外:
df[pd.np.where(df[['day2', 'day3', 'day4', 'day5']].eq(0).all(1), True, False)]
(附带问题:有没有更简单的方法而不是键入所有列的名称?)
如果上述条件为 True
,我希望创建一个新列并分配 0
,否则 -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
你有什么想法吗?
考虑到id
是索引,
df['new']=np.where(df.iloc[:,1:].eq(0).all(1),0,-1)
我有一个这样的数据框:
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
I select 一个子集,其中所有列中的值都为零,第一列除外:
df[pd.np.where(df[['day2', 'day3', 'day4', 'day5']].eq(0).all(1), True, False)]
(附带问题:有没有更简单的方法而不是键入所有列的名称?)
如果上述条件为 True
,我希望创建一个新列并分配 0
,否则 -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
你有什么想法吗?
考虑到id
是索引,
df['new']=np.where(df.iloc[:,1:].eq(0).all(1),0,-1)