如何以预定义的增量乘以列?

时间:2017-10-17 18:47:14

标签: python pandas dataframe

假设我在一列中有一个带有整数(值)的pandas df。当值为<时,我需要创建一个等于0的第二列。当值> = 100时,100,1.00,并且如果值减小,则每25次增加值加0.25,反之亦然。但我只想在新列中添加0.25到值2.00,即最多四次。

预期结果'大小':

value   size
90          0.00
100         1.00 
110         1.00 
115         1.00 
125         1.25 
145         1.25 
150         1.50 
175         1.75 
195         1.75 
200         2.00 
230         2.00 
250         2.00 
200         2.00 
180         1.75 
150         1.50 
135         1.25 
120         1.00 
109         1.00 
99          0.00

欢迎任何建议!

3 个答案:

答案 0 :(得分:3)

您可以使用//(整数除法):

In [11]: (df.value // 25) * 0.25
Out[11]:
0     0.75
1     1.00
2     1.00
3     1.00
4     1.25
5     1.25
6     1.50
7     1.75
8     1.75
9     2.00
10    2.25
11    2.50
12    2.00
13    1.75
14    1.50
15    1.25
16    1.00
17    1.00
18    0.75
Name: value, dtype: float64

除了< 100条件:

之外,它可以帮助你完成大部分工作
In [12]: (df.value >= 100) * ((df.value // 25) * 0.25)
Out[12]:
0     0.00
1     1.00
2     1.00
3     1.00
4     1.25
5     1.25
6     1.50
7     1.75
8     1.75
9     2.00
10    2.25
11    2.50
12    2.00
13    1.75
14    1.50
15    1.25
16    1.00
17    1.00
18    0.00
Name: value, dtype: float64

然后将那些剪辑为2:

In [13]: (df.value >= 100) * ((df.value // 25) * 0.25).clip(0, 2)
Out[13]:
0     0.00
1     1.00
2     1.00
3     1.00
4     1.25
5     1.25
6     1.50
7     1.75
8     1.75
9     2.00
10    2.00
11    2.00
12    2.00
13    1.75
14    1.50
15    1.25
16    1.00
17    1.00
18    0.00
Name: value, dtype: float64

答案 1 :(得分:1)

使用pd.cut

R=list(range(100, 225,25))
R=[0]+R+[np.inf]
label=[0]+list(np.arange(1.0,2.25,0.25))
pd.cut(df.value,R,labels=label,right=False)

Out[16]: 
0     0.00
1     1.00
2     1.00
3     1.00
4     1.25
5     1.25
6     1.50
7     1.75
8     1.75
9     2.00
10    2.00
11    2.00
12    2.00
13    1.75
14    1.50
15    1.25
16    1.00
17    1.00
18    0.00

答案 2 :(得分:1)

此解决方案与@Andy Hayden's solution非常相似:

In [80]: df['size'] = df['value'].clip(100, 200) // 25 * 0.25

In [81]: df
Out[81]:
    value  size
0      90  1.00
1     100  1.00
2     110  1.00
3     115  1.00
4     125  1.25
5     145  1.25
6     150  1.50
7     175  1.75
8     195  1.75
9     200  2.00
10    230  2.00
11    250  2.00
12    200  2.00
13    180  1.75
14    150  1.50
15    135  1.25
16    120  1.00
17    109  1.00
18     99  1.00