【问题标题】:Python Pandas DataFrame - How to sum values in 1 column based on partial match in another column (date type)?Python Pandas DataFrame - 如何根据另一列(日期类型)中的部分匹配对一列中的值求和?
【发布时间】:2020-12-18 05:57:39
【问题描述】:

我在使用 Pandas DataFrame 处理我的数据集时遇到了一些问题。

这是我的数据集:

我的数据类型如下所示:

我的数据集来自:
MY_DATASET = pd.read_excel(EXCEL_FILE_PATH, index_col = None, na_values = ['NA'], usecols = "A, D")

  1. 我想在“日期”列中对每个月的“人数”列中的所有值求和。例如,只要“日期”列中的值为“2020-01”、“2020-02”...
    但是,我被卡住了,因为我不确定如何在部分匹配上使用 .groupby。

  2. 1) 完成后,我还尝试将“DATE”列中的值从 YYYY-MM-DD 转换为 YYYY-MMM,例如 2020-Jan。
    但是,我不确定是否有这样的格式。

有谁知道如何解决这些问题?

非常感谢!

【问题讨论】:

    标签: python pandas dataframe date


    【解决方案1】:

    我做了一些修改,发现这对我也有用:

    祝大家好运

    【讨论】:

      【解决方案2】:

      您可以使用 strftime('%b') 获取缩写的月份名称​​但是月份名称将全部小写:

      df['group_time'] = df.date.apply(lambda x: x.strftime('%Y-%B')) 
      

      如果您需要大写月份的第一个字母,您可以这样做:

      df.group_date = df.group_date.apply(lambda x: f'{x[0:5]}{x[5].upper()}{x[6:]}'
      
      # or in one step:
      
      df['group_date']= df.date.apply(lambda x: x.strftime('%Y-%B')).apply(lambda x: f'{x[0:5]}
          ...: {x[5].upper()}{x[6:]}')   
      

      现在你只需要 .groupby 和 .sum():

      result = df['NUMBER OF PEOPLE'].groupby(df.group_date).sum()
      

      【讨论】:

        【解决方案3】:

        检查

        s = df['NUMBER OF PEOPLE'].groupby(pd.to_datetime(df['DATE'])).dt.strftime('%Y-%b')).sum()
        

        【讨论】:

        • 感谢您的建议!这就是我要找的东西!
        猜你喜欢
        • 2021-06-04
        • 2018-02-09
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        • 1970-01-01
        • 2018-09-09
        • 2011-01-19
        相关资源
        最近更新 更多