小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Pandas基礎|列方向分組變形

 小小明代碼實體 2021-11-30

作者:小小明

剛才碰到一個非常簡單的需求:

image-20210126223201342

但是我發(fā)現(xiàn)大部分人在做這個題的時候,代碼寫的異常復雜。所以我建議你也不要直接看我的代碼,而是先思考一下,你會怎么解決這個問題。

首先讀取數(shù)據(jù):

import pandas as pd

df = pd.read_excel("練習.xlsx", index_col=0)
df

結果:

image-20210126223648678

為了后續(xù)處理方便,我將不需要參與分組的第一列事先設置為索引。

groupby分組相信大部分讀者都使用過,但一直都是按行分組,不過groupby不僅可以按行分組,還可以按列進行分組。

完整處理代碼:

result = []
for year, split in df.groupby(df.columns.str[:4], axis=1):
    split.rename(columns=lambda s: s[5:], inplace=True)
    split.reset_index(inplace=True)
    split["年份"] = year
    result.append(split)
result = pd.concat(result, ignore_index=True)
result

結果:
在這里插入圖片描述

可以看到,非常簡單,僅8行以內(nèi)的代碼已經(jīng)解決這個問題,剩下的只需在保存到excel時設置一下單元格格式即可,具體設置方法可以參考:

Pandas指定樣式保存excel數(shù)據(jù)的N種姿勢

地址:https://blog.csdn.net/as604049322/article/details/111829106

簡單講解一下吧:

df.columns.str[:4]

結果:

Index(['2018', '2019', '2020', '2018', '2019', '2020'], dtype='object')

截取每列列名前4個字符,傳入groupby即可作為分組依據(jù),axis=1則指定了groupby按列進行分組而不是默認的按行分組。

split.rename(columns=lambda s: s[5:], inplace=True)

表示對分組后的結果去除列名的前5個字符。

split.reset_index(inplace=True)

表示還原索引為普通的列。

split["年份"] = year

將年份添加到后面單獨的一列。

總之這個問題非常簡單,相信大部分讀者在看到代碼后已經(jīng)秒懂。

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多