有个dataframe A列是随机的从100到200逐渐增大的数字,B列是50到100的随机数
A B
100 55
100 65
102 51
105 85
.......
200 61
200 56
把数值100-200分成30份,100 占比最小,200占比最大,中间占比线性过渡,然后按照A列每个数的占比取B列从大到小排列的值
有个dataframe A列是随机的从100到200逐渐增大的数字,B列是50到100的随机数
A B
100 55
100 65
102 51
105 85
.......
200 61
200 56
把数值100-200分成30份,100 占比最小,200占比最大,中间占比线性过渡,然后按照A列每个数的占比取B列从大到小排列的值
【以下回答由 GPT 生成】
以下是实现该需求的步骤:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({
'A': np.random.randint(100, 201, size=1000),
'B': np.random.randint(50, 101, size=1000)
})
bin_size = 30
df['A_bin'] = pd.cut(df['A'], bins=bin_size, labels=False, retbins=False)
bin_counts = df['A_bin'].value_counts()
df['A_bin_pct'] = df['A_bin'].map(lambda x: bin_counts[x] / len(df))
df_sorted = df.sort_values(['A_bin', 'B'], ascending=[True, False])
print(df_sorted)
以上步骤将实现该需求,输出排序后的 DataFrame。
请注意,由于每次运行的随机数不同,可能会得到不同的结果。代码中使用了随机数种子 np.random.seed(0)
来保证结果可复现。
如果没有解决您的问题或者您有其他问题,请告诉我。
【相关推荐】