我有一个数据框df
,看起来像:
A B
0 0 4140
1 0.142857 1071
2 0 1196
3 0.090909 2110
4 0.083333 1926
5 0.166667 1388
6 0 3081
7 0 1149
8 0 1600
9 0.058824 1873
10 0 3960
: : :
19 0 4315
20 0 2007
21 0.086957 3323
22 0.166667 1084
23 0.5 2703
24 0 1214
25 0 1955
26 0 6750
27 0 3240
28 0 1437
29 0 1701
我正在尝试使用以下代码行尝试产生一个新列,如果A大于0(否则填充为0),然后用90多次除以A / B,则将其除以A://
df['new_column'] = np.where(df['A'] = 0, 0.0, df['A'].divide(df['B']))*90.0
但是我得到该行的错误:
result[:] = [tuple(x) for x in values]
TypeError: 'int' object is not iterable
所需的new_column输出为:
A B new_column
0 0 4140 0
1 0.142857 1071 0.01200479
2 0 1196 0
3 0.090909 2110 0.003877635
4 0.083333 1926 0.003894065
5 0.166667 1388 0.010806938
6 0 3081 0
7 0 1149 0
8 0 1600 0
9 0.058824 1873 0.002826567
10 0 3960 0
: : : :
19 0 4315 0
20 0 2007 0
21 0.086957 3323 0.00235514
22 0.166667 1084 0.013837666
23 0.5 2703 0.016648169
24 0 1214 0
25 0 1955 0
26 0 6750 0
27 0 3240 0
28 0 1437 0
29 0 1701 0
任何帮助将不胜感激
答案 0 :(得分:2)
请注意,numpy.where
的工作方式为:
numpy.where(condition [,x,y])
因此:
import pandas as pd
df = pd.DataFrame({'A':[0,0.142857,0,0.090909],
'B':[4140,1071,1196,2110]})
df['new_column'] = np.where(df['A'] > 0, df['A']*90/df['B'], 0)
输出
A B new_column
0 0.000000 4140 0.000000
1 0.142857 1071 0.012005
2 0.000000 1196 0.000000
3 0.090909 2110 0.003878