Pandas - 基于每列的前 x% 值,标记为新数字
Pandas - Based on top x% value of each column, Mark as new number
我下面有一个 pandas 数据框:
df
name value
0 Jack 3
1 Luke 3
2 Mark 2
3 Chris 1
4 Ace 10
5 Isaac 8
基于 "value" 列,我希望将前 50% 的值标记为 1,将后 50% 的值标记为 0。
期待得到以下结果:
Results
name value percent mark
0 Jack 3 0
1 Luke 4 1
2 Mark 2 0
3 Chris 1 0
4 Ace 10 1
5 Isaac 8 1
提前致谢。
您可以将一个序列与其中位数进行比较,然后将 bool
转换为 int
:
df['percent_mark'] = (df['value'] > df['value'].median()).astype(int)
对于特定百分比,使用 pd.Series.quantile
。例如:
df['percent_mark'] = (df['value'] > df['value'].quantile(0.25)).astype(int)
您也可以使用 numpy
,这可能更快
import numpy as np
df['percent_mark_50'] = np.where(df.value > df.value.median(), 1, 0)
或
df['percent_mark_25'] = np.where(df.value > np.percentile(df.value, 25), 1, 0)
我下面有一个 pandas 数据框:
df
name value
0 Jack 3
1 Luke 3
2 Mark 2
3 Chris 1
4 Ace 10
5 Isaac 8
基于 "value" 列,我希望将前 50% 的值标记为 1,将后 50% 的值标记为 0。
期待得到以下结果:
Results
name value percent mark
0 Jack 3 0
1 Luke 4 1
2 Mark 2 0
3 Chris 1 0
4 Ace 10 1
5 Isaac 8 1
提前致谢。
您可以将一个序列与其中位数进行比较,然后将 bool
转换为 int
:
df['percent_mark'] = (df['value'] > df['value'].median()).astype(int)
对于特定百分比,使用 pd.Series.quantile
。例如:
df['percent_mark'] = (df['value'] > df['value'].quantile(0.25)).astype(int)
您也可以使用 numpy
,这可能更快
import numpy as np
df['percent_mark_50'] = np.where(df.value > df.value.median(), 1, 0)
或
df['percent_mark_25'] = np.where(df.value > np.percentile(df.value, 25), 1, 0)