【问题标题】:Aggregate columns with same date (sum)聚合具有相同日期的列(总和)
【发布时间】:2018-10-26 16:20:54
【问题描述】:

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

到目前为止,我的代码返回以下内容:

                      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新手,如果我做了一些尴尬的事情,很抱歉,谢谢!

【问题讨论】:

    标签: python excel pandas xlsx xlsxwriter


    【解决方案1】:

    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'))
    

    【讨论】:

    • df['date'] = pandas.to_datetime(df['date']).dt.date 工作就像一个魅力,但df.groupby(df['date'].dt.date).sum() 没有,仍然获得与以前相同的返回,但带有格式化的日期。
    • 你尝试了groupby 之后你修改了df['date']吗?如果是这样,您需要省略.dt.date,并尝试df.groupby('date').sum()
    • 是的,出现错误Length mismatch: Expected axis has 2 elements, new values have 3 elements
    • 嗯,这对我来说没有发生,你的示例数据框......我每天得到预期的总和(我刚刚将我的输出添加到我的答案中)
    • 等一下...您是否尝试将value 列中的值修改为当天值的总和?或者你到底想达到什么目的?
    猜你喜欢
    • 2022-06-14
    • 2019-05-07
    • 2015-05-27
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多