我有以下示例数据框:
pd.DataFrame({'Name': ['A', 'B', 'C', 'D', 'E'],
'Score': [2, 6, np.nan, 3, 4],
'Value 1': [10, 30, 20, 5, 15],
'Value 2': [400, 250, 100, 300, 150]})
Name Score Value 1 Value 2
0 A 2.0 10 400
1 B 6.0 30 250
2 C NaN 20 100
3 D 3.0 5 300
4 E 4.0 15 150
我想根据“得分”的排序将此数据帧存储到:[最高四分位数,第二四分位数,第三四分位数,底部四分位数,无等级],然后计算(例如)落入的值的平均值“值1”和“值2”中的相应存储区。因此,得分的NaN应该落在“无评级”类别中,“值1”中的NaN应该落在“前四分位数”中,而“值2”中的250应该放在“前四分位数”中,因为得分最高(6和30分别是单个数字的平均值)本身。)
答案 0 :(得分:1)
您可以按以下方式应用qcut;
df['bucket'] = pd.qcut(df['Score'], 4, ['q1','q2','q3','q4'])
df.groupby('bucket')[['Value 1','Value 2']].mean()
通常,它将排除NaN,因此我将bucket列更改为str,或者您可以应用fillna将值指定为NaN。
df['bucket'] = df['bucket'].astype(str)
df.groupby('bucket')[['Value 1','Value 2']].mean()