如何制作小数部分舍入过滤器,使用 python pandas Dataframe apply 方法
How to make decimal part rounding filter, using python pandas Dataframe apply method
我想用 pandas Dataframe 制作十进制过滤器。
过滤器将上限和下限它们的小数部分。
像这样
阈值为 0.3 和 0.7
0.75 -> 1
1.99 -> 2
9.13 -> 9
326.2 -> 326
34.5 -> 34.5
68.4 -> 68.4
import pandas as pd
def threshold_function(df):
print(df)
decimal_part = df - np.floor(df)
if (decimal_part <= 0.3):
return np.floor(df)
elif (0.7 <= decimal_part):
return np.floor(df) + 1
return df
example = pd.DataFrame([0.75,1.99,9.13,326.2,34.5])
filtered_df = example.apply(threshold_function)
我不知道为什么数据框应用方法不起作用。
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
谢谢:)
decimal, base = np.modf(example)
filtered_df = pd.DataFrame(np.select(
[decimal <= 0.3, decimal >= 0.7],
[base, base + 1],
default=example
), columns=example.columns, index=example.index)
Example
:
example = pd.DataFrame([[0.75, 1.99, 9.13, 326.2, 34.5],
[0.85, 2.65, 10.19, 42.2, 61.65]])
0 1 2 3 4
0 0.75 1.99 9.13 326.2 34.50
1 0.85 2.65 10.19 42.2 61.65
filtered_df
:
0 1 2 3 4
0 1.0 2.00 9.0 326.0 34.50
1 1.0 2.65 10.0 42.0 61.65
或通过 applymap
进行修订:
def threshold_function(v):
decimal_part = v - np.floor(v)
if decimal_part <= 0.3:
return np.floor(v)
elif 0.7 <= decimal_part:
return np.ceil(v)
return v
example = pd.DataFrame([[0.75, 1.99, 9.13, 326.2, 34.5],
[0.85, 2.65, 10.19, 42.2, 61.65]])
filtered_df = example.applymap(threshold_function)
example
0 1 2 3 4
0 0.75 1.99 9.13 326.2 34.50
1 0.85 2.65 10.19 42.2 61.65
filtered_df
:
0 1 2 3 4
0 1.0 2.00 9.0 326.0 34.50
1 1.0 2.65 10.0 42.0 61.65
我想用 pandas Dataframe 制作十进制过滤器。
过滤器将上限和下限它们的小数部分。
像这样
阈值为 0.3 和 0.7
0.75 -> 1
1.99 -> 2
9.13 -> 9
326.2 -> 326
34.5 -> 34.5
68.4 -> 68.4
import pandas as pd
def threshold_function(df):
print(df)
decimal_part = df - np.floor(df)
if (decimal_part <= 0.3):
return np.floor(df)
elif (0.7 <= decimal_part):
return np.floor(df) + 1
return df
example = pd.DataFrame([0.75,1.99,9.13,326.2,34.5])
filtered_df = example.apply(threshold_function)
我不知道为什么数据框应用方法不起作用。
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
谢谢:)
decimal, base = np.modf(example)
filtered_df = pd.DataFrame(np.select(
[decimal <= 0.3, decimal >= 0.7],
[base, base + 1],
default=example
), columns=example.columns, index=example.index)
Example
:
example = pd.DataFrame([[0.75, 1.99, 9.13, 326.2, 34.5],
[0.85, 2.65, 10.19, 42.2, 61.65]])
0 1 2 3 4
0 0.75 1.99 9.13 326.2 34.50
1 0.85 2.65 10.19 42.2 61.65
filtered_df
:
0 1 2 3 4
0 1.0 2.00 9.0 326.0 34.50
1 1.0 2.65 10.0 42.0 61.65
或通过 applymap
进行修订:
def threshold_function(v):
decimal_part = v - np.floor(v)
if decimal_part <= 0.3:
return np.floor(v)
elif 0.7 <= decimal_part:
return np.ceil(v)
return v
example = pd.DataFrame([[0.75, 1.99, 9.13, 326.2, 34.5],
[0.85, 2.65, 10.19, 42.2, 61.65]])
filtered_df = example.applymap(threshold_function)
example
0 1 2 3 4
0 0.75 1.99 9.13 326.2 34.50
1 0.85 2.65 10.19 42.2 61.65
filtered_df
:
0 1 2 3 4
0 1.0 2.00 9.0 326.0 34.50
1 1.0 2.65 10.0 42.0 61.65