使用DataFrame导出系列的转换

时间:2013-07-03 21:24:10

标签: python pandas series dataframe

我将以下格式的数据存储在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。

1 个答案:

答案 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