簡體   English   中英

Python Pandas DataFrame - 如何根據另一列(日期類型)中的部分匹配對 1 列中的值求和?

[英]Python Pandas DataFrame - How to sum values in 1 column based on partial match in another column (date type)?

我在使用 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) 完成后,我還嘗試將“日期”列中的值從 YYYY-MM-DD 轉換為 YYYY-MMM,例如 2020-Jan。
    但是,我不確定是否有這樣的格式。

有誰知道如何解決這些問題?

非常感謝!

查看

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

您可以使用 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()

我做了一些修補,發現這對我也有用:

在此處輸入圖片說明

在此處輸入圖片說明

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM