gpt4 book ai didi

python - 数据框中的条件新列

转载 作者:行者123 更新时间:2023-12-01 08:50:34 25 4
gpt4 key购买 nike

例如,我有一个数据框:

      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

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 行)有一些错误:

          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

有什么迹象表明发生了什么吗?

<小时/>

更新

d = b.loc[9:12, ['B1','MIMO']].to_dict(orient='list')
print(d)

输出:

{'B1': ['3A', '3A', '3A', '3A'], 'MIMO': ['1A', ' 3A', ' 3A', ' 1A-3A']}

最佳答案

存在问题,需要通过 str.strip 删除跟踪空格:

b['MIMO'] = b['MIMO'].str.strip()

此外,您的解决方案应该使用 eq 重写为一个 np.where用于比较:

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

关于python - 数据框中的条件新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com