如何拆分Pandas数据框中ADMINCOORDINATOR行并修改对应字段值
Pandas数据框拆分需求解决方案
需求说明
需要将数据框中Membership为ADMINCOORDINATOR的行拆分为两行:
- 一行
Membership设为ADMIN,Specs设为160 - 另一行
Membership设为COORDINATOR,Specs设为180
同时保持原始数据的排序顺序。
实现步骤及代码
1. 创建原始数据框
首先构造题目中的初始数据:
import pandas as pd data = { 'Name': ['Adam', 'James', 'Michael', 'Lina', 'Alexey', 'David'], 'Membership': ['NORMAL', 'NORMAL', 'ADMINCOORDINATOR', 'NORMAL', 'ADMINCOORDINATOR', 'NORMAL'], 'Specs': [170] * 6 } df = pd.DataFrame(data)
2. 分离并处理数据
将数据分为正常行和需要拆分的行,分别处理后再合并:
# 提取无需拆分的NORMAL行 normal_df = df[df['Membership'] == 'NORMAL'].copy() # 提取需要拆分的ADMINCOORDINATOR行 to_split_df = df[df['Membership'] == 'ADMINCOORDINATOR'].copy() # 生成ADMIN类型的行 admin_df = to_split_df.assign(Membership='ADMIN', Specs=160) # 生成COORDINATOR类型的行 coordinator_df = to_split_df.assign(Membership='COORDINATOR', Specs=180) # 按原始索引顺序合并所有数据,使用mergesort保证稳定排序 result_df = pd.concat([normal_df, admin_df, coordinator_df]) \ .sort_index(kind='mergesort') \ .reset_index(drop=True)
3. 验证结果
执行上述代码后,result_df即为目标格式的数据框:
Name Membership Specs 0 Adam NORMAL 170 1 James NORMAL 170 2 Michael ADMIN 160 3 Michael COORDINATOR 180 4 Lina NORMAL 170 5 Alexey ADMIN 160 6 Alexey COORDINATOR 180 7 David NORMAL 170
另一种简洁实现方式(使用explode)
如果偏好更简洁的写法,可以利用explode方法直接展开列表:
# 为需要拆分的行生成对应列表,其余行保持单个元素的列表 df_processed = df.assign( Membership=df['Membership'].map(lambda m: ['ADMIN', 'COORDINATOR'] if m == 'ADMINCOORDINATOR' else [m]), Specs=df.apply(lambda row: [160, 180] if row['Membership'] == 'ADMINCOORDINATOR' else [row['Specs']], axis=1) ) # 展开列表并重置索引 result_df = df_processed.explode(['Membership', 'Specs']).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者the7blank
相关产品推荐
相关产品推荐

