我是熊猫新手。
我的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
相同,每个类别一行。
任何建议可能有什么问题?谢谢。
答案 0 :(得分:1)
如果要用诸如mean
,sum
或分位数之类的聚合值填充新列,请使用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.quantile
和Cat
列中的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')