【发布时间】:2018-11-06 00:26:45
【问题描述】:
我正在使用 pandas 来计算文件名中“anystring”所在列的总和,并添加一个行“Totals_string”,其中包含对名为“any string”的请求的总和
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 进行测试,但它应该以某种方式包含所有感兴趣的名称。
谢谢
【问题讨论】:
-
对于你的属性错误,只需大写
Requests(因为你的列名是Requests而不是requests) -
@sacul 固定示例.. 粘贴错误但错误仍然存在,当一切都在相同的情况下也更新示例
-
试试
df.url_info_filename.str.extract('anyString(.*)xx').requests... -
@sacul 我用 ^ 示例相同的错误编辑了问题。 xx 只是代表文件名中的任何字符 ABC 只是用来区分不同名称的可能性,但它不是字面上的 A,BorC,抱歉不清楚。
-
如果始终是 1 个字符,请使用
str.extract('anyString(\w)'),但如果没有明确的规则来说明您要提取的内容,我不确定还能提供什么
标签: python python-2.7 pandas dataframe