Python-科學計算-pandas-19-df分組上中下旬

ZB-Coder發表於2020-12-07

系統:Windows 10
語言版本:conda 4.4.10
編輯器:JetBrains PyCharm Community Edition 2018.2.2 x64
pandas:0.22.0

  • 這個系列講講Python的科學計算及視覺化
  • 今天講講pandas模組
  • 按照時間列,得出每行屬於上中下旬,進而對df進行分組

Part 1:場景描述

  1. 已知df,包括3列,["time", "pos", "value1"]
  2. 根據time列的結果對df進行分組,分為上旬、中旬、下旬三組
  3. 分組規則,設定如下(這裡只是假設一種分法,官方分法請查閱相關資料):
    • 每月10號之前(包括10號)為上旬,對應數學表示式為:x ≤10
    • 每月10-20號為中旬,對應數學表示式為:10<x ≤20
    • 每月20號之後為下旬,不包括20號,對應數學表示式為:x >20

df
在這裡插入圖片描述

Part 2:程式碼邏輯

  1. 新生成time1列,該列是time列對應的日期格式資料
  2. 生成一個新列flag,為time1列對應的具體幾號(取值範圍1-31)
  3. flag進行判斷,將結果寫入xun
  4. 根據xun列進行過濾,獲取對應資料

Part 3:程式碼

import pandas as pd
import numpy as np

# 顯示所有列
pd.set_option('display.max_columns', None)
# 顯示所有行
pd.set_option('display.max_rows', None)
# 設定顯示長度為100
pd.set_option('max_colwidth', 100)
# 設定對齊
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 設定列印寬度
pd.set_option('display.width', 180)

dict_1 = {"time": ["2019-11-02", "2019-11-15", "2019-11-25", "2019-11-05",
                   "2019-12-13", "2019-12-03", "2019-12-16", "2019-12-29"],
          "pos": ["A", "A", "B", "B", "C", "C", "C", "D"],
          "value1": [10, 20, 30, 40, 50, 60, 70, 80]}

df = pd.DataFrame(dict_1, columns=["time", "pos", "value1"])
print("\n", "df", "\n", df, "\n", df.dtypes)

df["time1"] = pd.to_datetime(df['time'])
print("\n", "df", "\n", df, "\n", df.dtypes)

# 獲取年月日資訊
df["年"] = df["time1"].dt.year
df["月"] = df["time1"].dt.month
df["日"] = df["time1"].dt.day
df["時"] = df["time1"].dt.hour
df["分"] = df["time1"].dt.minute
df["秒"] = df["time1"].dt.second

df["flag"] = df["日"]

df["xun"] = np.where((df["flag"] > 10) & (df["flag"] <= 20), "中旬", np.where(df["flag"] <= 10, "上旬", "下旬"))
print("\n")
print(df)

df_1 = df[df["xun"] == "上旬"]
print("\n")
print(df_1)

df_1 = df[df["xun"] == "中旬"]
print("\n")
print(df_1)

df_1 = df[df["xun"] == "下旬"]
print("\n")
print(df_1)


程式碼截圖

在這裡插入圖片描述

在這裡插入圖片描述

Part 4:部分程式碼解讀

  1. df["time1"] = pd.to_datetime(df['time'])時間格式轉換,新生成的資料型別為datetime64

時間格式轉換
在這裡插入圖片描述
2. df["日"] = df["time1"].dt.day獲取日期對應的具體幾號
3.df["xun"] = np.where((df["flag"] > 10) & (df["flag"] <= 20), "中旬", np.where(df["flag"] <= 10, "上旬", "下旬")),兩重判斷
- np.where(條件,滿足條件結果,不滿足條件結果)
- 支援巢狀,有點VBA公式的感覺
- 對flag列的每個元素進行計算,結果為xun

在這裡插入圖片描述
4. df_1 = df[df["xun"] == "上旬"]獲取上旬資料

在這裡插入圖片描述

本文為原創作品,歡迎分享朋友圈

長按圖片識別二維碼,關注本公眾號
Python 優雅 帥氣
12x0.8.jpg

相關文章