首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dataframe中的条件新列

dataframe中的条件新列
EN

Stack Overflow用户
提问于 2018-11-05 06:31:33
回答 1查看 71关注 0票数 1

例如,我有一个dataframe:

代码语言:javascript
复制
      B1   B2   B3  B4  BCS ULCA     MIMO 
6    28A   1A             0    .       1A   
7    28A   1A             1    .       1A    
8     3A   1A             0    .       1A  
9     3A   1A             1    .       1A   
10    3A   1A             0    .       3A   
11    3A   1A             1    .       3A  
12    3A   1A             0    .    1A-3A   
13    3A   1A             1    .    1A-3A   

我使用np.where作为新列来做条件:如果B1-B4的值等于MIMO,那么将4放在新的列中,如果不是,则放置2

代码语言:javascript
复制
b['B1_m'] = np.where(b['B1'] == b['MIMO'], '4', '2')
b['B2_m'] = np.where(b['B2'] == b['MIMO'], '4', '2')
b['B3_m'] = np.where(b['B3'] == b['MIMO'], '4', '2')
b['B4_m'] = np.where(b['B4'] == b['MIMO'], '4', '2')

但是,我的输出在某些行(第10、11行)有一些错误:

代码语言:javascript
复制
          B1   B2   B3  B4  BCS ULCA     MIMO B1_m B2_m B3_m B4_m
    6    28A   1A             0    .       1A    2    4    2    2
    7    28A   1A             1    .       1A    2    4    2    2
    8     3A   1A             0    .       1A    2    4    2    2
    9     3A   1A             1    .       1A    2    4    2    2
    10    3A   1A             0    .       3A    2    2    2    2
    11    3A   1A             1    .       3A    2    2    2    2
    12    3A   1A             0    .    1A-3A    2    2    2    2
    13    3A   1A             1    .    1A-3A    2    2    2    2

有什么提示吗?

更新

代码语言:javascript
复制
d = b.loc[9:12, ['B1','MIMO']].to_dict(orient='list')
print(d)

输出:

代码语言:javascript
复制
{'B1': ['3A', '3A', '3A', '3A'], 'MIMO': ['1A', ' 3A', ' 3A', ' 1A-3A']}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 06:54:24

存在的问题是有必要通过str.strip删除传输空白空间

代码语言:javascript
复制
b['MIMO'] = b['MIMO'].str.strip()

另外,您的解决方案应该用eq重写到一个eq,以便进行比较:

代码语言:javascript
复制
cols = ['B1','B2','B3','B4']
arr = np.where(b[cols].eq(b['MIMO'], axis=0), '4','2')
#alternative
#arr = np.where(b[cols].values == b['MIMO'].values[:, None], '4','2')

b = b.join(pd.DataFrame(arr, columns=cols, index=b.index).add_suffix('_m'))
print (b)
     B1  B2  B3  B4  BCS ULCA   MIMO B1_m B2_m B3_m B4_m
6   28A  1A NaN NaN    0    .     1A    2    4    2    2
7   28A  1A NaN NaN    1    .     1A    2    4    2    2
8    3A  1A NaN NaN    0    .     1A    2    4    2    2
9    3A  1A NaN NaN    1    .     1A    2    4    2    2
10   3A  1A NaN NaN    0    .     3A    4    2    2    2
11   3A  1A NaN NaN    1    .     3A    4    2    2    2
12   3A  1A NaN NaN    0    .  1A-3A    2    2    2    2
13   3A  1A NaN NaN    1    .  1A-3A    2    2    2    2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53149407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档