首页 > 解决方案 > 对 DataFrame 进行排序、存储和应用功能

问题描述

我有以下示例数据框:

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”。因此,来自 Score 的 NaN 应该属于 No Rating 桶,来自“Value 1”的 30 和来自“Value 2”的 250 应该属于 Top Quartile,因为 6 的得分最高(30 和 250 是单个数字的平均值是它本身)。

标签: pandasdataframe

解决方案


您可以按如下方式应用 qcut;

df['bucket'] = pd.qcut(df['Score'], 4, ['q1','q2','q3','q4'])
df.groupby('bucket')[['Value 1','Value 2']].mean()

通常,它将排除 NaN,因此我将存储桶列更改为 str ,或者您可以应用 fillna 将值指定为 NaN。

df['bucket'] = df['bucket'].astype(str)
df.groupby('bucket')[['Value 1','Value 2']].mean()

推荐阅读