满足条件时计算分位数

时间:2019-12-16 13:52:06

标签: python pandas

我是熊猫新手。

我的DataFrame看起来像这样:

DataFrame

我在向DataFrame添加第1,第2,第3四分位数时遇到问题。

如果列CTR在同一列中,我试图获取列Cat的四分位数。

我总共有大约40个小组。

我尝试过的事情:

df_final['1st quartile'] = round(
    df_final.groupby('Cat')['CTR'].quantile(0.25), 2)
df_final['2nd quartile'] = round(
    df_final.groupby('Cat')['CTR'].quantile(0.5), 2)
df_final['3rd quartile'] = round(
    df_final.groupby('Cat')['CTR'].quantile(0.75), 2)

但是值是以我无法解释的方式添加的,例如从第二行开始,而不是以最后一列CTR Average Difference vs category的方式添加。

我想要的输出将与最后一列CTR Average Difference vs category相同,每个类别一行。

任何建议可能有什么问题?谢谢。

1 个答案:

答案 0 :(得分:1)

如果要用诸如meansum或分位数之类的聚合值填充新列,请使用GroupBy.transform

#similar ofr 2. and 3rd quantile
df_final['1st quartile'] = (df_final.groupby('Cat')['CTR']
                                    .transform(lambda x: x.quantile(0.25))
                                    .round(2))

或者您可以依次使用DataFrameGroupBy.quantileCat列中的DataFrame.join

df = df_final.groupby('Cat')['CTR'].quantile([0.2, 0.5, 0.75]).round(2)
df.columns = ['1st quartile','2nd quartile','3rd quartile']
df_final = df_final.join(df, on='Cat')