あなたは、あなたがlambda
を使用することができますarguments
でapply
機能roundPartial
が必要な場合:
def roundPartial (value, resolution):
return round (value/resolution) * resolution
print (df[['B', 'C']].apply(lambda x: roundPartial(x, 0.25)))
B C
0 0.50 1.25
1 -1.25 1.00
2 1.50 1.00
3 -0.25 -2.00
4 -0.75 -0.25
5 1.00 0.00
6 0.75 0.50
7 -0.75 0.25
8 0.00 1.25
9 -2.25 -1.50
round
のもう一つの解決策:
print (df[['B', 'C']].apply(lambda x: (x/0.25).round()* 0.25))
B C
0 0.50 1.25
1 -1.25 1.00
2 1.50 1.00
3 -0.25 -2.00
4 -0.75 -0.25
5 1.00 0.00
6 0.75 0.50
7 -0.75 0.25
8 0.00 1.25
9 -2.25 -1.50
しかしDataFrame
大きな最速は、あなたがmul
によってresolution
と複数でdiv
すべてDataFrame
によって分割することができ、apply
使用されていません。
resolution = 0.25
print ((df[['B', 'C']].div(resolution)).round().mul(resolution))
#print ((df[['B', 'C']]/resolution).round() * resolution)
B C
0 0.50 1.25
1 -1.25 1.00
2 1.50 1.00
3 -0.25 -2.00
4 -0.75 -0.25
5 1.00 0.00
6 0.75 0.50
7 -0.75 0.25
8 0.00 1.25
9 -2.25 -1.50
タイミング:len(df)=100k
:
df = pd.concat([df]*10000).reset_index(drop=True)
In [125]: %timeit (df[['B', 'C']].apply(lambda x: (x/resolution).round()* resolution))
10 loops, best of 3: 29 ms per loop
In [126]: %timeit ((df[['B', 'C']]/resolution).round() * resolution)
10 loops, best of 3: 22.5 ms per loop
In [127]: %timeit ((df[['B', 'C']].div(resolution)).round().mul(resolution))
10 loops, best of 3: 22.6 ms per loop