如何从Pandas多重索引中绘制海生线图?

2024-09-27 00:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

Noobish Seaborn/熊猫问题:我有一个Facebook页面帖子数据的电子表格,看起来像这样(前20行):

| Name                   | ID              | Type      | Date             | Shares | Comments | Reactions | Engagement |
|------------------------|-----------------|-----------|------------------|--------|----------|-----------|------------|
| Herman Toothrot's Page | 201295459914847 | link      | 13/05/2020 09:00 | 61     | 39       | 610       | 710        |
| Guybrush's Page        | 167959249906191 | link      | 13/05/2020 09:04 | 4      | 27       | 481       | 512        |
| Elaine's Page          | 187202271820522 | album     | 13/05/2020 09:12 | 0      | 3        | 96        | 99         |
| Elaine's Page          | 187202271820522 | album     | 13/05/2020 09:14 | 1      | 14       | 426       | 441        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:20 | 3      | 8        | 158       | 169        |
| Herman Toothrot's Page | 201295459914847 | link      | 13/05/2020 09:20 | 26     | 101      | 508       | 635        |
| Elaine's Page          | 187202271820522 | undefined | 13/05/2020 09:23 | 1      | 11       | 109       | 121        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:28 | 2      | 257      | 987       | 1246       |
| Herman Toothrot's Page | 201295459914847 | photo     | 13/05/2020 09:30 | 1      | 0        | 178       | 179        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:31 | 3      | 6        | 162       | 171        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:38 | 44     | 143      | 4294      | 4481       |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:39 | 7      | 79       | 631       | 795        |
| Herman Toothrot's Page | 201295459914847 | link      | 13/05/2020 09:40 | 3      | 0        | 104       | 107        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:45 | 0      | 3        | 76        | 79         |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:45 | 20     | 78       | 1455      | 1553       |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:46 | 7      | 321      | 1847      | 2175       |
| Guybrush's Page        | 167959249906191 | link      | 13/05/2020 09:46 | 4      | 2        | 311       | 317        |
| Elaine's Page          | 187202271820522 | photo     | 13/05/2020 09:50 | 2      | 29       | 777       | 808        |
| Elaine's Page          | 187202271820522 | link      | 13/05/2020 09:53 | 0      | 0        | 115       | 115        |
| Herman Toothrot's Page | 201295459914847 | link      | 13/05/2020 10:00 | 143    | 255      | 10211     | 10609      |

实际数据集可扩展多天

我想做一个Seaborn线图,以时间为X轴(“日期”),然后以数量(按天)为Y轴

然后,我想将其中一个数值变量设置为SIZE参数,并按色调分隔页面(“Name”)

因此最终结果将类似于Seaborn教程示例:

enter image description here

我从概念上知道,这需要每天重新采样(或某种groupby?),以便每天为每个页面创建汇总数据桶,如Excel数据透视表中所示:

enter image description here

我想这可能还需要一个多索引

我以为我已经有了进展

facebook_dataframe.groupby(["Name", "Date", "Reactions"], as_index=False)["Engagement"].sum()

。。。但是我不想仅仅通过参与(或者仅仅通过任何一个变量)来求和,我希望能够在白天进行绘图

我尝试过按天对数据帧进行重新采样,但我最终得到的是一个显示计数或总和的序列,而我希望以天为单位,所有数字变量保持不变(根据上面的透视表)

我希望这是清楚的。我注意到提供的20个样本行都是在一天内完成的,但任何建议解决方案都可以按分钟重新采样,方法是一样的吗?非常感谢您的帮助👍


Tags: 数据namealbumdatepagelink页面seaborn
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:15

IIUC,您要做的是groupby使用^{}给出您想要的频率和名称,然后使用agg与您想要得到的所有列和函数类似:

data = (df.groupby([pd.Grouper(key='Date', freq='5T'), #replace 5T by D to get daily agggregation
                    'Name'])
          .agg(count=('Name','count'), 
               sum_shares=('Shares','sum'), 
               sum_comments=('Comments','sum'), 
               sum_engagement=('Engagement','sum'), )
          .reset_index()
       )

print (data.head())
                 Date                      Name  count  sum_shares  \
0 2020-05-13 09:00:00   Guybrush's Page              1           4   
1 2020-05-13 09:00:00   Herman Toothrot's Page       1          61   
2 2020-05-13 09:10:00   Elaine's Page                2           1   
3 2020-05-13 09:20:00   Elaine's Page                2           4   
4 2020-05-13 09:20:00   Herman Toothrot's Page       1          26   

   sum_comments  sum_engagement  
0            27             512  
1            39             710  
2            17             540  
3            19             290  
4           101             635  

然后您可以使用seaborn如:

import seaborn as sns
sns.lineplot(x='Date', y='count', data=data,
             hue='Name', 
             size='sum_shares') #here for the size use what summed column you want

我不发布图片,因为在给出的20行数据中,没有什么可以看到的

相关问题 更多 >

    热门问题