我将以下格式的数据存储在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
我还希望能够将来自DataFrame的每个(metric_name)的metric_name特定数据提取到Series对象中。即因此它将是一个公制的每日总和,如linkedin_profiles。
答案 0 :(得分: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