python 用groupby之后生成新的数据框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 用groupby之后生成新的数据框相关的知识,希望对你有一定的参考价值。

参考技术A 最近在做一点点风控的东西,想把toad中的ks_bucket改修正下,原码里面是按得分的最大最小值划分的bucket,但我在实际的应用中想更个性化的划分节点去统计。

首先需要解决的一个问题是把0~1上的概率给划分到不同的区间,然后分别统计即可。

之前一直用groupby,分组后想count, sum,后变成df。在网上找了好几种方法,都没有成功,最后还是英文文档解决了我的问题。

这是划分好后的各列情况 , 第一列:概率,第二列:所属的区间, 第三列: 实际的label

我主要是 想把这三列 , 按第二列分组,统计各区间的总数,和label为1的数
用NamedAgg 即可把原来的分组变为数据框。

熊猫:在groupby之后重新塑造/重新转动数据框

我在我的数据框的quantile列上应用duration函数:

a=df.groupby('version')[['duration']].quantile([.25, .5, .75])
a

                   duration
version     
4229        0.25    1451.00
            0.50    1451.00
            0.75    1451.00
6065        0.25     213.75
            0.50     426.50
            0.75     639.25
9209        0.25     386.50
            0.50     861.00
            0.75     866.00
2304        0.25     664.50
            0.50     669.00
            0.75     736.50
6389        0.25       1.00
            0.50     797.00
            0.75     832.00

我想知道如何重新塑造/重新调整上面的数据框,所以新数据框(是的,它必须是数据框格式)可能如下所示:

version   duration_Q1    duration_Q2    duration_Q3

4429      1451.00        1451.00        1451.00
6065      213.75         426.50         639.25
9209      386.50         861.00         866.00
2304      664.50         669.00         736.50
6389      1.00           797.00         832.00

谢谢!

答案

您可以使用unstack,然后进行一些重命名操作

a = pd.DataFrame('duration': {(2304L, 0.25): 1565.6861959516361,
  (2304L, 0.5): 446.4769649280514,
  (2304L, 0.75): 701.8254115357969,
  (4229L, 0.25): 1868.982390749203,
  (4229L, 0.5): 242.36201172579996,
  (4229L, 0.75): 789.482292226787,
  (6065L, 0.25): 1421.9585894685038,
  (6065L, 0.5): 357.04491735326343,
  (6065L, 0.75): 169.78973203074895,
  (6389L, 0.25): 1789.1550141153925,
  (6389L, 0.5): 516.9365429825862,
  (6389L, 0.75): 1830.6493228794639,
  (9209L, 0.25): 1129.853279993191,
  (9209L, 0.5): 1759.1258334115485,
  (9209L, 0.75): 1499.0498929925702}}
)

pvt = a.unstack()
pvt.columns = pvt.columns.droplevel(0)
pvt.rename(columns={0.25:'duration_Q1',0.5:'duration_Q2',0.75:'duration_Q3'},inplace=True)

        duration_Q1  duration_Q2  duration_Q3
version                                       
2304     1565.686196   446.476965   701.825412
4229     1868.982391   242.362012   789.482292
6065     1421.958589   357.044917   169.789732
6389     1789.155014   516.936543  1830.649323
9209     1129.853280  1759.125833  1499.049893

以上是关于python 用groupby之后生成新的数据框的主要内容,如果未能解决你的问题,请参考以下文章

Python:用 groupby 绘制熊猫数据框 - 奇怪的输出

Spark数据框:如何在groupBy + sum之后使用

使用 groupby 创建新的数据框

将 groupby 平均统计数据映射为 pandas 中的新列

使用 pyspark 在 groupBy 之后保存数据框视图

Python数据框中的置信区间