Pandas 数据帧的排序、存储桶和应用功能

Pandas 数据帧的排序、存储桶和应用功能,pandas,dataframe,Pandas,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

我有以下示例数据帧:

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-from分数应落在无评级区间,而“值1”的30分和“值2”的250分应落在前四分位,因为6分是最高的30分,250分是单个数字的平均值本身。

您可以按如下方式应用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()