2

我将以下形式的数据存储在 DataFrame 中。我想获得按类型分组的每个指标的每日总和,例如 2012 年 10 月 3 日的linkedin_profiles 的总和。

sample_date                            metric_name  sample

2012-10-03 21:30:18.742307+00:00  linkedin_profile     257
2012-10-03 21:30:25.132189+00:00   twitter_profile     972
2012-10-03 21:30:26.063389+00:00     youtube_video   10393
2012-10-03 21:30:26.178347+00:00     youtube_video    2866
2012-10-03 21:30:26.215093+00:00     youtube_video    5877

我还可能希望能够将 metric_name 特定数据提取到 DataFrame 中每个 (metric_name) 的 Series 对象中。即,这将是像linkedin_profiles 这样的一个指标的每日总和。

4

1 回答 1

4

假设你有这个 DataFrame:

import io
import pandas as pd

text = '''\
sample_date                            metric_name  sample
2012-10-03 21:30:18.742307+00:00  linkedin_profile     257
2012-10-03 21:30:25.132189+00:00   twitter_profile     972
2012-10-03 21:30:26.063389+00:00     youtube_video   10393
2012-10-03 21:30:26.178347+00:00     youtube_video    2866
2012-10-03 21:30:26.215093+00:00     youtube_video    5877
'''        
df = pd.read_table(io.BytesIO(text), sep='\s{2,}', parse_dates=[0,1])

您可以按日期和 metric_name 分组,然后将这些sample值相加,如下所示:

dates = df['sample_date'].apply(lambda x: x.date())
total = df.groupby([dates, 'metric_name']).sum()
print(total)
#                               sample
# sample_date metric_name             
# 2012-10-03  linkedin_profile     257
#             twitter_profile      972
#             youtube_video      19136

或者,如果您希望首先只选择那些metric_name等于的行'youtube_video',您可以使用

youtube_df = (df[df['metric_name'] == 'youtube_video'])

然后像这样分组日期:

dates = youtube_df['sample_date'].apply(lambda x: x.date())
youtube_total = youtube_df.groupby([dates]).sum()
print(youtube_total)
# sample_date        
# 2012-10-03    19136
于 2013-07-03T21:46:47.633 回答