看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。
表格图示如下:
import pandas as pd
df = pd.DataFrame({
'姓名': list('甲乙丙')+[None],
'序号': list('12')+[None]*2,
'列': list('ABCD')
})
df
'''
姓名 序号 列
0 甲 1 A
1 乙 2 B
2 丙 None C
3 None None D
'''
利用 pd.MultiIndex.from_product
方法,再经过一系列数据格式转换:
(
pd.MultiIndex.from_product([df.姓名, df.序号, df.列], names=df.columns)
.to_frame()
.loc[lambda x: x.apply(lambda s: s.notna().all(), axis=1)]
.astype(str)
.agg(sum, axis=1)
.to_frame('生成')
)
'''
生成
姓名 序号 列
甲 1 A 甲1A
B 甲1B
C 甲1C
D 甲1D
2 A 甲2A
B 甲2B
C 甲2C
D 甲2D
乙 1 A 乙1A
B 乙1B
C 乙1C
D 乙1D
2 A 乙2A
B 乙2B
C 乙2C
D 乙2D
丙 1 A 丙1A
B 丙1B
C 丙1C
D 丙1D
2 A 丙2A
B 丙2B
C 丙2C
D 丙2D
'''
需求轻松实现。
更新时间:Oct. 24, 2024, 9:15 a.m. 标签:pandas python 生成数据