具有相同日期(总和)的聚合列

时间:2018-05-16 14:39:27

标签: python excel pandas xlsx xlsxwriter

所以,我需要聚合日期相同的行。

截至目前,我的代码返回以下内容:

                      date  value  source
0  2018-04-08 15:52:26.110      1  ANAPRO
1  2018-04-22 12:14:38.807      1  ANAPRO
2  2018-04-22 12:34:18.403      1  ANAPRO
3  2018-04-22 12:40:35.877      1  ANAPRO
4  2018-04-22 12:53:57.897      1  ANAPRO
5  2018-04-22 13:02:45.180      1  ANAPRO
6  2018-05-04 17:41:15.840      1  ANAPRO
7  2018-04-22 15:03:54.353      1  ANAPRO
8  2018-04-22 15:24:27.030      1  ANAPRO
9  2018-04-22 15:27:56.813      1  ANAPRO

我不认为我可以聚合列而我有HH:MM:SS.ms与日期一起显示(我只需要日期)

我试过这个:

df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f').astype(str)

但无济于事,我仍然得到同样的回报。

代码是:

读取我的Excel文件(用户输入)。

df = pandas.read_excel(var + '.xlsx')

选择我需要的列,并创建一个新的.xlsx来包含它。

df = df.iloc[:, 36].to_excel(var + '_.xlsx', index=False)

打开新的.xlsx文件。

df = pandas.read_excel(var + '_.xlsx')

重命名列

df = df.rename(columns={'Prospect Dt. Cadastro': 'date'})

添加我需要的其他列。

df['value'] = 1
df['source'] = 'ANAPRO'

尝试格式化日期。

df['date'] = pandas.to_datetime(df['date'], format='%b %d` %Y.%f').astype(str)

使用所有格式化数据创建最终的xlsx。

df = df.to_excel('payload.xlsx')

阅读最终的xlsx。

df = pandas.read_excel('payload.xlsx', names=['date', 'value', 'source'])

打印前10行。

print(df.head(10))

我是python的新手,很抱歉,如果我做的事情很尴尬,谢谢!

1 个答案:

答案 0 :(得分:2)

IIUC,您可能需要pandas.Series.dt.date

df['date'] = pandas.to_datetime(df['date']).dt.date

>>> df
         date  value  source
0  2018-04-08      1  ANAPRO
1  2018-04-22      1  ANAPRO
2  2018-04-22      1  ANAPRO
3  2018-04-22      1  ANAPRO
4  2018-04-22      1  ANAPRO
5  2018-04-22      1  ANAPRO
6  2018-05-04      1  ANAPRO
7  2018-04-22      1  ANAPRO
8  2018-04-22      1  ANAPRO
9  2018-04-22      1  ANAPRO

或者,如果您的目标是使用groupby汇总,则可以保留原始日期列中的所有信息,并仅按日期分组:

df['date'] = pandas.to_datetime(df['date'])

df.groupby(df['date'].dt.date)
# for example, to get the sum each day:
# df.groupby(df['date'].dt.date).sum()

#             value
# date             
# 2018-04-08      1
# 2018-04-22      8
# 2018-05-04      1

或者,使用pd.Grouper

df['date'] = pandas.to_datetime(df['date'])

df.groupby(pd.Grouper(key='date', freq='D'))