看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本例中,我们将解决一个在 Excel 中常见的操作,如下图,将一个平铺的数据,按日期显示,同一日期的产品则分列显示,不同产品合并显示在列上。
我们将数据用文本形式表示:
'''
日期 产品 数据1 数据2 数据3 数据4 数据5 数据6
1月 产品1 1 2 3 4 5 6
1月 产品2 2 3 4 5 6 7
2月 产品1 1 2 3 4 5 6
2月 产品2 2 3 4 5 6 7
'''
# 复制以上数据读取
df = pd.read_clipboard()
# 或者读取文件
# df = pd.read_excel('Book1.xlsx')
df
或者可以下载文件:Excel下载
分析需求,首先要对日期进行分组,利用 groupby(),分组后每个日期是一个子 DataFrame,我们用 apply() 处理这些子 DataFrame。子 DataFrame 用产品为索引用 stack() 堆叠,其中不再需要日期列,用 drop() 删除日期列。最终的代码为:
(
df.groupby('日期')
.apply(lambda x: x.drop('日期', axis=1)
.set_index('产品')
.stack()
)
)
'''
产品 产品1 产品2
数据1 数据2 数据3 数据4 数据5 数据6 数据1 数据2 数据3 数据4 数据5 数据6
日期
1月 1 2 3 4 5 6 2 3 4 5 6 7
2月 1 2 3 4 5 6 2 3 4 5 6 7
'''
当然可以将以上数据导出为 Excel:
(
df.groupby('日期')
.apply(lambda x: x.drop('日期', axis=1)
.set_index('产品')
.stack()
)
.to_excel('Book1-done.xlsx')
)
这样就完成了需求。
(完)
更新时间:2024-08-18 15:54:50 标签:pandas python excel