将dataframe total追加到新datafram

2024-10-02 20:31:12 发布

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

我使用pandas计算文件名中“anystring”列的总和,并添加一行“Totals\u string”,其中包含命名为“anystring”的请求的总和

df = pd.read_sql("select count(*) as requests,\
filename,\
file_extension,\
date_trunc('day', log_time) as date\
from "+dbase+"\
where\
filename like '%anyStringA%'\
OR\
filename like '%anyStringB%'\
OR\
filename like '%anyStringC%'\
and\
file_extension not in ('gif')\
group by filename,file_extension,date_trunc('day', log_time)\
order by requests desc",conn)

这将创建如下所示的df:

requests    filename    Extension   date
0   10  xxanyStringAxx  .jpg    2018-10-31
1   8   xxanyStringBxx  .jpg    2018-10-31
2   11  xxanyStringCxx  .jpg    2018-10-31
3   12  xxxanyStringAxx .jpg    2018-10-31
.

我想创建一个新的DF,其中包含每个条件的总数,例如 数据帧看起来像

Totals_anyStringA = 22
Totals_anyStringB = 8
Totals_anyStringC = 11

根据@sacul的建议,我这样做了:

Totals_df = (df.groupby(df.url_info_filename.str.extract('anyName(.*)')\
                        .requests.sum()\
                        .add_prefix('Total_')\
                        .to_frame()))

我的错误是:

AttributeError: 'Series' object has no attribute 'requests'

*此外,我只是不知道如何为每个不同的名称创建新行,正如您所看到的,我只是在使用anyStringA进行测试,但它应该以某种方式包含所有感兴趣的名称

谢谢


Tags: logdfdateasextensionfilenamerequestslike
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:12

IIUC,您希望从文件名中提取Album后面和下划线_前面的字符串,然后按该字符串分组,获取总和,并将其放入新表中。如果是这种情况,您可以这样做(我添加了一些任意相册来说明):

>>> df
   Requests    filename Extension        date
0    914208  AlbumA_100      .jpg  2018-10-31
1     73795  AlbumA_132      .jpg  2018-10-31
2     39651  AlbumA_130      .jpg  2018-10-31
3        10  AlbumB_130      .jpg  2018-10-31
4        15  AlbumB_135      .jpg  2018-10-31
4        85  AlbumC_135      .jpg  2018-10-31
4        15   AlbumC_13      .jpg  2018-10-31

totals_df = (df.groupby(df.filename.str.extract('Album(.*)_'))
             .Requests.sum()
             .add_prefix('Total_')
             .to_frame())

>>> totals_df
          Requests
filename          
Total_A    1027654
Total_B         25
Total_C        100

相关问题 更多 >