如何用Pandas从stat列拆分生成range和stat两个新列?
拆分DataFrame的stat列生成新列
原始数据
location stat type Q1 28 Q2 28 Q3 28 Q4 28 NY Low_Re_Num_De AA 2 0 0 0 NY Low_Gr_Num_De AA 2 2 2 6 NY Low_Re_Num_De BB 0 0 0 0 NY Low_Gr_Num_De BB 0 0 2 4 NY Low_Re_Num_De DD 0 2 4 4 NY Low_Gr_Num_De DD 2 2 4 8 NY Low_Re_Num_De SS 0 0 0 0 NY Low_Gr_Num_De SS 0 0 0 2 CA Med_Re_Num_De AA 0 4 0 0 CA Med_Gr_Num_De AA 2 0 0 0 CA Med_Re_Num_De BB 0 2 0 0 CA Med_Gr_Num_De BB 0 0 0 2 CA Med_Re_Num_De DD 0 6 0 0 CA Med_Gr_Num_De DD 2 0 0 0 CA Med_Re_Num_De SS 0 2 0 0 CA Med_Gr_Num_De SS 0 0 0 0
期望结果
location range stat type Q1 28 Q2 28 Q3 28 Q4 28 NY Low Re AA 2 0 0 0 NY Low Gr AA 2 2 2 6 NY Low Re BB 0 0 0 0 NY Low Gr BB 0 0 2 4 NY Low Re DD 0 2 4 4 NY Low Gr DD 2 2 4 8 NY Low Re SS 0 0 0 0 NY Low Gr SS 0 0 0 2 CA Med Re AA 0 4 0 0 CA Med Gr AA 2 0 0 0 CA Med Re BB 0 2 0 0 CA Med Gr BB 0 0 0 2 CA Med Re DD 0 6 0 0 CA Med Gr DD 2 0 0 0 CA Med Re SS 0 2 0 0 CA Med Gr SS 0 0 0 0
已实现的代码
已成功生成range列:
df['range'] = df['stat'].apply(lambda x: x.split('_')[0])
解决方案
要生成新的stat列,只需提取原stat字段拆分后的第二个元素,有两种实现方式:
方式一:延续原有apply逻辑
df['stat'] = df['stat'].apply(lambda x: x.split('_')[1])
方式二:更高效的批量拆分(推荐)
使用Pandas的str.split方法一次性拆分出所需列,比apply性能更优:
# 拆分原stat列,取前两部分分别赋值给range和新stat列 df[['range', 'stat']] = df['stat'].str.split('_', n=2, expand=True).iloc[:, [0, 1]]
n=2:限制拆分次数,仅拆分出前两个分隔符的内容,忽略后续的Num_Deexpand=True:将拆分结果转换为DataFrameiloc[:, [0,1]]:选取拆分后的第0列(对应range)和第1列(对应新stat)
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

