【问题标题】:How to sum up duration in one column based on simillar date in a Pandas dataframe?如何根据 Pandas 数据框中的相似数据总结一列中的持续时间?
【发布时间】:2023-02-02 22:12:36
【问题描述】:
Date Name Duration
01.01.23 John Adams 14:52
01.01.23 John Adams 15:02
01.01.23 Stacey Roland 29:47
01.04.23 Ron Swanson 30:22
01.05.23 Jan Wood 28:48

我正在尝试获取一个新的 df,如果名称和日期相同,则将 Duration 列中的值相加。

结果应该是这样的

Date Name Duration
01.01.23 John Adams 29:54
01.01.23 Stacey Roland 29:47

我尝试使用 groupby,但我似乎并不完全理解它是如何工作的。

df = df.groupby('日期').sum()

不工作。

【问题讨论】:

    标签: python group-by jupyter-notebook


    【解决方案1】:

    假设你首先需要转换你的持续时间字符串to_timedelta,然后你可以groupby.sum

    out = (df.assign(Duration=pd.to_timedelta('00:'+df['Duration']))
             .groupby(['Date', 'Name'], as_index=False).sum()
          )
    
    print(out)
    

    注意。假设14:52MM:SS,对于HH:MM你需要用pd.to_timedelta(df['Duration']+':00')转换。

    输出:

           Date           Name        Duration
    0  01.01.23     John Adams 0 days 00:29:54
    1  01.01.23  Stacey Roland 0 days 00:29:47
    2  01.04.23    Ron Swanson 0 days 00:30:22
    3  01.05.23       Jan Wood 0 days 00:28:48
    

    使用的输入:

    df = pd.DataFrame({'Date': ['01.01.23', '01.01.23', '01.01.23', '01.04.23', '01.05.23'],
                       'Name': ['John Adams', 'John Adams', 'Stacey Roland', 'Ron Swanson', 'Jan Wood'],
                       'Duration': ['14:52', '15:02', '29:47', '30:22', '28:48']})
    

    【讨论】:

    • 由于某种原因,未返回 Duration 列。仅保留日期和姓名
    • 你分配输出了吗?您能否像我在回答中那样提供可重现的输入?
    【解决方案2】:

    这是仅使用.to_timedelta().groupby().sum() 的替代方法。

    df["Duration"] = pd.to_timedelta(df["Duration"])
    df = df.groupby(["Date", "Name"], as_index=False).sum()
    print(df)
    

           Date           Name        Duration
    0  01.01.23     John Adams 0 days 00:29:54
    1  01.01.23  Stacey Roland 0 days 00:29:47
    2  01.04.23    Ron Swanson 0 days 00:30:22
    3  01.05.23       Jan Wood 0 days 00:28:48
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2022-11-22
      • 2018-01-16
      • 2021-04-03
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多