【发布时间】:2015-09-17 17:25:32
【问题描述】:
我获取了一个大数据文件并设法使用 groupby 和 value_counts 来获取下面的数据框。但是,我想对其进行格式化,使公司位于左侧,月份在顶部,每个数字将是该月的呼叫次数,第三列。
这是我要排序的代码:
data = pd.DataFrame.from_csv('MYDATA.csv')
data[['recvd_dttm','CompanyName']]
data['recvd_dttm'].value_counts()
count = data.groupby(["recvd_dttm","CompanyName"]).size()
df = pd.DataFrame(count)
df.pivot(index='recvd_dttm', columns='CompanyName', values='NumberCalls')
这是我的输出 df=
recvd_dttm CompanyName
1/1/2015 11:42 Company 1 1
1/1/2015 14:29 Company 2 1
1/1/2015 8:12 Company 4 1
1/1/2015 9:53 Company 1 1
1/10/2015 11:38 Company 3 1
1/10/2015 11:31 Company 5 1
1/10/2015 12:04 Company 2 1
我想要
Company Jan Feb Mar Apr May
Company 1 10 4 45 40 34
Company 2 2 5 56 5 57
Company 3 3 7 71 6 53
Company 4 4 4 38 32 2
Company 5 20 3 3 3 29
我知道本文档http://pandas.pydata.org/pandas-docs/stable/reshaping.html 中的数据框有一个漂亮的数据帧枢轴函数,因此我一直在尝试使用 df.pivot(index='recvd_dttm', columns='CompanyName', values=' NumberCalls')
一个问题是第三列没有名称,所以我不能将它用于 values = 'NumberCalls'。第二个问题是弄清楚如何在我的数据框中采用日期时间格式并使其仅按月显示。
编辑: CompanyName 是第一列,recvd_dttm 是第 15 列。这是我经过多次尝试后的代码:
data = pd.DataFrame.from_csv('MYDATA.csv')
data[['recvd_dttm','CompanyName']]
data['recvd_dttm'].value_counts()
RatedCustomerCallers = data['CompanyName'].value_counts()
count = data.groupby(["recvd_dttm","CompanyName"]).size()
df = pd.DataFrame(count).set_index('recvd_dttm').sort_index()
df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M')
result = df.groupby([lambda idx: idx.month, 'CompanyName']).agg({df.columns[1]: sum}).reset_index()
result.columns = ['Month', 'CompanyName', 'NumberCalls']
result.pivot(index='recvd_dttm', columns='CompanyName', values='NumberCalls')
它抛出这个错误:KeyError: 'recvd_dttm' and won't get to the result line.
【问题讨论】:
标签: python datetime pandas pivot dataframe